我正在尝试学习 lisp 并搜索了问题并找到了我无法理解的答案。有人可以帮助我解决我正在尝试的问题。
所以我创建了一个基本函数 RotateL,它应该将列表作为其参数并返回一个新列表,其中前一个元素变为最后一个。
所以我创造了
(defun rotate (L)
(Append ( rest L) (first L)))
ROTATE
我不能将 L 设置为 a (a b c) 我尝试了 SETQ L '( a b c)
并且最后我做了 (rotate L)
它给了我也是一个错误。
我认为这是因为我试图在值 L 中放入一个列表而不是一个元素。
请有人解释和帮助。
最佳答案
既然你已经深深地迷失了:
? (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)
您可能需要查看正式 和实际 参数的含义。
关于lisp - 如何让 defun 接受一个列表作为它的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556827/