错误:带点的Lambda列表只允许在宏中,而不是在这里:LIST?

时间:2017-02-12 01:29:44

标签: lisp common-lisp clisp

我正在编写一个名为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))))))

2 个答案:

答案 0 :(得分:4)

Lambda List

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,您的缩进建议不是您想要做的。