lisp - 检查元素是否在树中

标签 lisp

我需要用 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/

相关文章:

lisp - Lisp 读取过程可以读取这个吗?如何读取?

Lisp Append 不能正常工作

emacs - Mac 上的 Lisp 开发

lisp - 为什么 CLISP 在此嵌套循环期间停止响应?

object - Lisp:基本的面向对象计数器

lisp - 什么时候在Lisp中使用'(或引用)?

pointers - 如何取消引用 emacs lisp 变量?

lisp - lisp 库的良好来源?

lisp - 普通口齿不清 : flush standard output

clojure - Clojure 被认为是 Lispy 还是 Schemey?