【问题标题】:Should be a lamba expression-LISP应该是一个 lambda 表达式-LISP
【发布时间】:2012-05-26 21:17:44
【问题描述】:

我的代码只有一个功能:

(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

感谢任何帮助

【问题讨论】:

标签: lisp expression


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2015-12-20
      • 2011-02-04
      • 2015-01-12
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多