2013-11-24 3 views
-1

; 리프 표지 트리 (LLT)는 다음 중 하나입니다언어 체계, 리프 레이블 트리

; * 빈

; L1은 비어 LLT이고, L2 * (양론 L1, L2)는

LLT

이다; V는 지능과 L * (죄수 V의 난),는 LLT

방법 잎 표지 트리의 특정 목록을 찾을 수있다? 예를 들어, 매개 변수 n이 있고 n이 포함 된 목록을 찾고 싶습니다. 어떻게해야합니까?

+0

목록이 무엇인가요? 'leaf-labeled-tree' 만 정의했습니다.'empty'와'Int'를 언급했습니다. 사용자의 설명에 따라리스트는 아무 곳에도 맞지 않습니다 (단지'Int'와'Llt'). – GoZoner

+0

LLT 자체가 – Cylia

+0

그래서 문제가'n'이 포함 된 하위 트리를 찾는 것입니다 목록입니다. – GoZoner

답변

1

빈 나무가 있습니다. '() 또는 (cons x y)입니다. 여기서 x와 y는 정수 값이거나 하위 트리 일 수 있습니다. 기본적으로 번호가있는 단순한 목록 구조일까요? 이 이후

난 그냥가는 길에 몇 가지 힌트를주는거야 숙제 수 있습니다 : 두 eq? 그래서 당신이 실제로 너무 나무의 일부를 검색 할 수 있습니다 할 경우

(define (locate tree x) 
    (cond ;; if it's not a pair we didn't find it 
     ((not (pair? <??>)) #f) 
     ;; if the car or the cdr of tree is x, return tree 
     ((or (eqv? <??> <??>) (eqv? <??> <??>)) <??>) 
     ;; answer must be in either the car OR the cdr 
     (else (or (locate <??> x) (locate <??> x))))) 

eqv?는 #T됩니다 . 예 :

(define tree '(1 (2 (3 (4) 5 6 7 8)))) 
(locate tree 4) ; ==> (4) 
(locate tree (locate tree 4)) ; ==> ((4) 5 6 7 8) 

는하지만 그것은 단지 eq?입니다 구조 작동합니다. 예를 들어 equal?을 사용하지 않으면이 기능이 작동하지 않습니다.

(locate tree '(4)) ; ==> #f 
관련 문제