Сортировка трех чисел в порядке возрастания

Вчера я вернулся домой и решил попробовать написать программу-схему, которая сортировала бы три числа в порядке возрастания. Вот что я придумал:

(define a 3)
(define b 2)
(define c 1)

(define temp 0)

(cond
    ( (> a c) (set! temp c) (set! c a) (set! a temp))
    ( (> b c) (set! temp c) (set! c b) (set! b temp))
    ( (> a b) (set! temp b) (set! b a) (set! a temp))
    ( (> b c) (set! temp c) (set! b c) (set! b temp))
)

(display a)
(display b)
(display c)

Является ли это функциональным способом решения проблемы? Что ты предлагаешь?


person janvidar    schedule 01.05.2011    source источник
comment
Я не знаю Scheme, но могу сказать, что это не функционально, это процедурно.   -  person Oliver Charlesworth    schedule 01.05.2011
comment
Моя идея состояла в том, чтобы иметь функцию, которая меняла бы местами значения двух переменных (a и b), если a было больше, чем b. Хотя не уверен, что это сделало бы это более приличным. Спасибо, что нашли время, чтобы прочитать это :)   -  person janvidar    schedule 01.05.2011


Ответы (1)


Scheme имеет встроенную функцию сортировки, которая в некоторых случаях работает быстрее, чем все используемые нами алгоритмы сортировки.

(sort < '(5 2 6))

возвращается

'(2 5 6)

Основная проблема, которую я вижу в вашей процедуре, заключается в том, что вы запускаете своп только один раз. Это здорово, если вы можете гарантировать, что один всегда будет посреди двух других, но я не уверен, что так будет всегда. Тоже поставил! это довольно уродливо, и когда я изучил схему, мой профессор сказал мне не использовать ее, потому что это требует больших ресурсов, и есть лучшие способы сделать это. Я бы порекомендовал поместить их все в список, а затем отсортировать и вытащить из списка, если вы хотите сделать это таким образом.

person bringel    schedule 01.05.2011
comment
Спасибо, shadesandcolor, я не знал, что set! требует больших ресурсов, я продолжу расследование. Кроме того, если кому-то интересно, я только что нашел эти примеры сортировки схемы - person janvidar; 01.05.2011