;;叶标记树(Llt)是以下之一:
;; *空
;; *(cons l1 l2),其中l1是非空Llt,l2是Llt
;; *(cons v l),其中v是Int,l是Llt
如何在标记为叶子的树中找到特定列表? 例如,如果我有一个参数n,我想找到哪个列表包含n。我该怎么办?
答案 0 :(得分:1)
所以你有空树,'()
或(cons x y)
,其中x和y可以是整数值或子树。基本上它只是带有数字的普通列表结构?
由于这可能是作业,我只是给你一些提示:
(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?
如果两者都是eq?
,则为#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