常见lisp错误…***-系统::%EXPAND-FORM:(<;J N)应为lambda表达式 ***-系统::%EXPAND-FORM:(

常见lisp错误…***-系统::%EXPAND-FORM:(<;J N)应为lambda表达式 ***-系统::%EXPAND-FORM:(,lambda,common-lisp,Lambda,Common Lisp,这是发生这种情况的代码: *** - SYSTEM::%EXPAND-FORM: (< J N) should be a lambda expression (定义SORTALIST(x)(setq i 0)(setq j(+i 1)) (cond((

这是发生这种情况的代码:

*** - SYSTEM::%EXPAND-FORM: (< J N) should be a lambda expression
(定义SORTALIST(x)(setq i 0)(setq j(+i 1))
(cond(((第n(i)(x))辆(第n(j)(x(())))辆)
(第n(i)(x)次交易所(第n(j)(x)次交易所)
(setqj(+j1))(SORTALIST(x)))
(t(setqj(+j1))(SORTALIST(x)))
(t(setqi(+i1))(setqj(+i1))(SORTALIST(x)))(x))
我改变了一个小时的事情,我不知道在哪里可以修复。
如何解决此问题?

很难找到代码没有问题的地方:

  • 不能使用局部变量在递归调用之间传递值
    i
    j
    需要改为函数参数。(另外,
    setq
    不是引入新局部变量的正确方法。请使用
    let

  • 不要将多个语句塞进一行,使用不同的缩进宽度来标记嵌套条件。难怪您无法识别这种糟糕格式的问题


谢谢。我会改变你说的每一件事。
(defun SORTALIST (x) (setq i 0) (setq j (+ i 1))
   (cond ((< i n)) (cond ((< j n))
   (cond ((> (car (nth (i) (x)))(car (nth (j) (x)))))
   (EXCHANGE (nth (i)(x))(nth (j)(x)))
   (setq j (+ j 1)) (SORTALIST (x)))
   (t (setq j (+ j 1)) (SORTALIST (x))))
   (t (setq i (+ i 1)) (setq j (+ i 1)) (SORTALIST (x)))) (x))