常见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))