【问题标题】:how to get defun to accept a list as its argument如何让 defun 接受一个列表作为它的参数
【发布时间】:2014-05-09 04:49:59
【问题描述】:

我正在尝试学习 lisp 并搜索了问题并找到了我无法理解的答案。有人可以帮我解决我正在尝试的事情。

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

所以我创建了

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

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

我认为这是我试图在值 L 中放置一个列表而不是一个元素的事实。

谁能解释一下并帮忙。

【问题讨论】:

  • 因拼写错误、格式错误、缺少交互示例和错误消息而被否决。
  • 感谢雷纳的帮助!

标签: lisp


【解决方案1】:

既然你已经深深迷失了:

? (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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2021-10-29
    • 2021-12-13
    • 1970-01-01
    • 2012-05-28
    • 2012-10-22
    相关资源
    最近更新 更多