我正在编写一个名为flatten
的函数,该函数应该采用包含嵌入列表的列表并返回它的简化版本。当我尝试执行我的功能时,我收到一个错误,说“带有点的Lambda列表只允许在宏中,而不是在这里:LIST”有关如何解决这个问题的任何建议吗?
这是我现在所拥有的。
(defun flatten list
(cond
(null list)'()
(list (first list))
(append (flatten (first list))
(flatten (rest list)))
(cons (first list (flatten (rest list))))))
答案 0 :(得分:4)
defun
的参数列表应该是Ordinary Lambda List(例如,在您的情况下为(list)
),而不是原子list
:
(defun flatten (list)
...)
您的cond
错了。
正确的语法是
(cond (condition1 form11 form12 ...)
(condition2 form21 form22 ...)
...)
E.g:
(defun select-options ()
(cond ((= a 1) (setq a 2))
((= a 2) (setq a 3))
((and (= a 3) (floor a 2)))
(t (floor a 3)))) => SELECT-OPTIONS
(setq a 1) => 1
(select-options) => 2
a => 2
(select-options) => 3
a => 3
(select-options) => 1
(setq a 5) => 5
(select-options) => 1, 2
答案 1 :(得分:0)
你的括号没有得到适当的平衡; (null list)'())
关闭了封闭的cond
,您的缩进建议不是您想要做的。