我有一个家庭作业,我需要做以下事情:
以树为参数并返回 nil/non-nil 值的函数,指示树是否仅包含唯一节点(即:树中没有重复节点)。
到目前为止,我已经编写了以下代码。我是一个 lisp 新手,我需要完成我的作业。这是我尝试实施的第一个解决方案。但是当我编译它时,它给了我以下错误:函数位置必须包含一个符号或 lambda 表达式:(第一棵树)。
(defun in (tree)
(cond ((null tree)
t)
((eq (first tree) (second tree))
nil)
((listp (first tree))
(or ((first tree) in (second tree))
((first tree) in (rest tree))))
(t
((first tree) in (rest tree)))))
这是我的第二次尝试,它也不起作用:
(defun flatten (structure)
(cond ((null structure) nil)
((atom structure) `(,structure))
(t (mapcan #'flatten structure))))
(defun uniNodes (inList &optional (out t) (test 0))
(cond ((null inList)
out)
((zerop test)
(uniNodes (flatten(cons (first inList) (rest inList))) out (+ test 1)))
((eq t (first out))
(uniNodes (rest inList) (compare1 (first inList) (rest inList) (first out)) test))
((eq nil (first out))
out)))
(defun compare1 (a list &optional (out t))
(cond ((null list)
out)
((equal a (first list))
nil)
(t
(compare1 a (rest list) (first out)))))
你能给我一些见解吗?