0

我的代码只有一个功能:

(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

任何帮助表示赞赏

4

2 回答 2

1

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

(progn
  (setq list1 ...)
  (setq list2 ...)
  (eql x y))
于 2012-05-26T22:38:07.400 回答
0

使用德摩根定律,您可以以不同的方式构建您的条件:

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

完全避免使用 progn (并不是说这是一件坏事,但它经常被不赞成)。

于 2012-05-27T12:39:15.733 回答