我需要一个函数来测试表示为(root list_of_nodes_subtree1 ... list_of_nodes_subtreen)
的N树中节点的成员资格。例如,如果树是(a (b (c)) (d) (e (f)))
而节点是b
,那么我们期望得到一个真值。
我尝试了一些地图功能,但我无法解决这个问题。我对lisp很新。一些解释对我来说意味着世界。
答案 0 :(得分:1)
试试:
(defun check (element tree &key (test #'eq))
"The tree is simply a nested list."
(cond
;; If the tree is empty
((null tree)
nil)
;; If the tree is a list
((listp tree)
(or
;; Recurse on the head of the list.
(check element (car tree) :test test)
;; Recurse on the tail of the list.
(check element (cdr tree) :test test)))
;; If the tree is just a node
(t
(funcall test element tree))))
;; Testing
(loop for el in '(a b c d e f g) collect
(check el '(a (b) (c (d) (e)))))
请注意,我默认使用eq
而不是equal
,因为我们正在比较同一个包的符号,但您可以使用任何您想要的比较功能。