我昨天回到家,决定尝试编写一个计划程序,按升序排序三个数字。这就是我想出的:
(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)
这是解决问题的功能性方式吗?你会建议什么?
答案 0 :(得分:2)
Scheme有一个内置排序函数,在某些情况下实际上比我们使用的所有排序算法更快。
(sort < '(5 2 6))
返回
'(2 5 6)
我在您的程序中看到的主要问题是您只运行一次交换。如果你可以保证一个人总是处于另外两个人的中间,那就太棒了,但我不能确定总会如此。还设置!有点难看,当我学会计划时,我的教授告诉我不要使用它,因为它是资源密集型的,并且有更好的方法来实现它。我建议将它们全部放在一个列表中,然后将它们排序并将它们从列表中拉出来,如果你想这样做的话。