应该是lambda表达式-LISP

时间:2012-05-26 21:17:45

标签: lisp expression

我的代码只有一个功能:

(defun equalprev (x y)
  (cond ((or (atom x) (atom y))
         (if (not (null isLoop))
             t
           ((setq list1 (append list1 (list x)))
            (setq list2 (append list2 (list y)))
            (eql x y))))
        ((equalprev (car x) (car y))
         (equalprev (cdr x) (cdr y)))))

*** - SYSTEM::%EXPAND-FORM: (SETQ LIST1 (APPEND LIST1 (LIST X))) should be a lambda
expression
The following restarts are available:
ABORT          :R1      Abort main loop

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

'if'表达式的替代表达式是((set!...)...)。第一个位置需要是函数或句法形式。在这种情况下,您需要预测:

(progn
  (setq list1 ...)
  (setq list2 ...)
  (eql x y))

答案 1 :(得分:0)

使用de Morgan定律,您可以用不同的方式构建您的条件:

(not
 (when (null isLoop)
   (setq list1 (append list1 (list x)))
   (setq list2 (append list2 (list y)))
   (not (eql x y))))

完全避免使用预测(不是说这是一件坏事,但往往不赞成)。