我需要用 Lisp 编写一个函数来检查元素 N 是否在树 TREE 中。
(defun TREE-CONTAINS (N TREE)
(cond ((equal TREE nil) nil)
((listp (CAR TREE)) (or (TREE-CONTAINS(N (CAR TREE)))
(TREE-CONTAINS(N (CDR TREE)))))
(t (cond ((equal N (CAR TREE)) t)
(t TREE-CONTAINS(N (CDR TREE)))))
)
)
例如,(TREE-CONTAINS (1 ((1 2 3) 4 5)))
将返回 true。但是当我用这个例子测试我的代码时,我不断收到一个错误,提示“未定义的函数 N 调用了参数 ((2 3))
”:(TREE-CONTAINS 2 '(1 2 3))
。当然 N 在这里应该是 1 但我不知道为什么它认为 N 是一个函数。有什么想法吗?
最佳答案
在调用 tree-contains
或任何 lisp 函数时,您不应在参数周围包含括号。它是 (function-name arg1 arg2)
,而不是 (function-name (arg1 arg2))
。
所以首先,删除调用参数周围的括号 (tree-contains(n (car tree)))
像这样: (tree-contains n (car tree ))
。对于 or
子句中对 tree-contains
的下一次调用也是类似的。此外,最后一个条件:(t TREE-CONTAINS(N (CDR TREE)))
应该这样调用:(t (tree-contains n (cdr tree)))
.
关于lisp - 检查元素是否在树中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46596045/