(root list_of_nodes_subtree1 ... list_of_nodes_subtreen)
으로 표시된 N 트리의 노드 멤버쉽을 테스트하는 함수가 필요합니다. 예를 들어 트리가 (a (b (c)) (d) (e (f)))
이고 노드가 b
인 경우 true 값을 예상합니다.트리의 Lisp 멤버쉽 노드
몇 가지 맵 기능을 시도했지만이 사실을 알 수 없습니다. 나는 꽤 lisp에 새롭다. 어떤 설명은 저에게 세계를 의미 할 것입니다. 우리는 동일한 패키지의 상징을 비교하고 있었기 때문에 내가 대신 equal
의 기본적으로 eq
을 사용
(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)))))
참고,하지만 당신은 당신이 원하는 comparaison의 funcion를 사용할 수 있습니다
우리가 일할 수있는 구체적인 예가 있습니까? 그리고 당신은 무엇을 시도 했습니까? 당신의 트리는 어떻게 구성되어 있는가 (구조체, 클래스, 중첩 된리스트, 해쉬 테이블 ...)? – fstamour
(A (B) (C (D) (E))). 중첩 목록에서 작성되었습니다. – JohnS
(defun는 검사 (LX) (COND ((동일 XL) T) (t (리스트 (체크 L 'mapcar 등등 번호 ( 를 추가'# 적용) ) ) ) ) ) (A (B) (C (D) (E))). 중첩 목록에서 작성됩니다. – JohnS