我需要在Lisp中编写一个函数来检查元素N是否在树中。
(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。但是当我用这个例子测试我的代码时,我一直收到一条错误,上面写着“用参数((2 3))
调用的未定义函数N”:(TREE-CONTAINS 2 '(1 2 3))
。当然N在这里应该是1,但我不知道它为什么认为N是一个函数。有什么想法吗?
答案 0 :(得分:0)
在对tree-contains
或任何lisp函数的调用中,不应在参数周围包括括号。它是(function-name arg1 arg2)
,而不是(function-name (arg1 arg2))
。
首先,删除调用(tree-contains(n (car tree)))
的参数周围的括号,如下所示:(tree-contains n (car tree))
。同样,对于tree-contains
子句中的or
的下一次调用。此外,最后一个条件:(t TREE-CONTAINS(N (CDR TREE)))
应该像这样调用:(t (tree-contains n (cdr tree)))
。