如何让defun接受列表作为其参数

时间:2014-05-09 04:50:00

标签: lisp

我正在努力学习lisp并搜索了这个问题并找到了我无法理解的回复。有人可以帮助我解决我的问题。

所以我创建了一个基本函数RotateL,它应该以列表作为参数,并返回一个新的列表,其中前一个元素成为最后一个。

所以我创造了

    (defun rotate (L)
                   (Append ( rest L) (first L)))
ROTATE

我无法将L设置为(a b c)我尝试SETQ L '( a b c),最后我做(rotate L)它也会给我一个错误。

我认为这是因为我试图将一个列表而不是一个元素放在值L中。

有人可以解释并帮助。

1 个答案:

答案 0 :(得分:0)

因为你迷路了:

? (defun rotate (L) (append (rest L) (first L)))
ROTATE

? (rotate '(a b c))
(B C . A)

? (setq X '(x y z))
(X Y Z)
? (rotate X)
(Y Z . X)

但是你看到你的功能坏了,通过添加list来纠正:

? (defun rotate (L) (append (rest L) (list (first L))))
ROTATE
? (rotate '(a b c))
(B C A)
? (rotate X)
(Y Z X)

您可能需要查找正式实际参数的含义。