我想问一下为什么这个功能不起作用...
(defun nenum(ls)
(cond
((null ls) nil)
((listp car(ls)) (nenum (rest ls)))
((numberp car(ls)) (nenum (rest ls)))
(t (cons (car ls) (nenum (rest ls))))))
示例:(nenum '(l 1 i (b) (5) s -2 p)) --> (li s p)
谢谢!
最佳答案
查看您在其中一个条件项中的谓词:
(listp car (ls))
因此应用带有两个参数 car
的函数 listp
和不带参数调用函数 ls
的结果。 car
和 ls
都需要是自由变量,listp
需要是与 defined in CLHS 不同的函数。因为它只需要一个参数。
也许您在编写 Algol 时有过这样的经历? Algol 函数调用看起来像 operator(operand)
但不是 CL。 CL 是一种 LISP 方言,我们在函数调用中采用这种形式:
(operand operator)
如果我们嵌套我们做同样的事情:
(operand (operand operator))
你在替代方案中做对了 (cons (car ls) (nenum (rest ls)))
关于lisp - 不是数字原子 LISP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037411/