移动第一个元素移动到列表的末尾 - Scheme

时间:2011-11-01 14:40:50

标签: scheme

我无法编写一个函数,每次调用它时都会将第一个元素移动到列表的末尾。我尝试使用反向和cdr的组合来切断两端的元素,但无法弄清楚如何将元素添加到正确的结尾。任何帮助,将不胜感激。谢谢!

正确的结果:

(first_to_last'(1 2 3))

(2 3 1)

(从头到尾(从头到尾'(1 2 3)))

(3 1 2)

1 个答案:

答案 0 :(得分:1)

我认为你个人而言正在过度扭转。

我们想要的是一个由cdr x组成的列表,其末尾附加car x。这里的一个技巧是car x不是列表,所以我们想在追加它之前将其转换为列表:

(define (first-to-last x) (append (cdr x) (list (car x))))

如果你想坚持基本原则,cons是把事情放在一起列表的真正基本方法,但它会有更多的工作。根据{{​​1}},您基本上最终会定义与append基本相同的内容。

编辑:我想如果你出于某种原因想要使用cons,你可以这样做:

append

它有点长,让我觉得有点笨拙,但无论如何都应该有效。