我无法编写一个函数,每次调用它时都会将第一个元素移动到列表的末尾。我尝试使用反向和cdr的组合来切断两端的元素,但无法弄清楚如何将元素添加到正确的结尾。任何帮助,将不胜感激。谢谢!
正确的结果:
(first_to_last'(1 2 3))
(2 3 1)
(从头到尾(从头到尾'(1 2 3)))
(3 1 2)
答案 0 :(得分:1)
我认为你个人而言正在过度扭转。
我们想要的是一个由cdr x
组成的列表,其末尾附加car x
。这里的一个技巧是car x
不是列表,所以我们想在追加它之前将其转换为列表:
(define (first-to-last x) (append (cdr x) (list (car x))))
如果你想坚持基本原则,cons
是把事情放在一起列表的真正基本方法,但它会有更多的工作。根据{{1}},您基本上最终会定义与append
基本相同的内容。 1}}已经存在,这很容易,但有点毫无意义。
编辑:我想如果你出于某种原因想要使用cons
,你可以这样做:
append
它有点长,让我觉得有点笨拙,但无论如何都应该有效。