宿題があり、次のことをする必要があります。
ツリーを引数として取り、ツリーに一意のノードのみが含まれるかどうかを示すnil / non-nil値を返す関数(つまり、ツリーに重複するノードがない)。
これまでに次のコードを記述しました。私はLispの初心者で、宿題を終える必要があります。これは私が実装しようとしている最初のソリューションです。しかし、コンパイルすると、次のエラーが発生します。関数の位置にはシンボルまたはラムダ式が含まれている必要があります:(FIRSTTREE)。
(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)))))
これが私の2回目の試みですが、これも機能していません。
(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)))))
洞察をお願いします。