lisp - 如何让 defun 接受一个列表作为它的参数

标签 lisp

我正在尝试学习 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/

相关文章:

haskell - 用于生成编程的非 C++ 语言?

php - php中的fexpr是什么?

package - 在 Common Lisp 中使用 iterate 包的正确方法

macros - 在循环中生成任意参数化函数

scheme - Racket 方案 - 将字符流写入文件

lisp - 访问整数位的函数的 Common Lisp setf 扩展

binary - 在方案( Racket )中更改二进制数中的特定索引位

loops - 使用 common lisp 'loop' 宏对向量求和

function - 宏定义和函数定义的区别

根据第 n 个元素对列表列表进行排序,然后是第 n+1 个元素,依此类推