Scheme 如何在DrRacket中使用族树创建列表
我有这个家谱,我想提取一个列表,列出所有蓝眼睛的人的名字 但我一直在得到一份清单:Scheme 如何在DrRacket中使用族树创建列表,scheme,racket,Scheme,Racket,我有这个家谱,我想提取一个列表,列出所有蓝眼睛的人的名字 但我一直在得到一份清单: '((("george") ()) ("joseph") ()) (define-struct node (name birth eyes father mother)) (define family (make-node "camille" 2015 "brown" (make-node "mark" 1988 "brown"
'((("george") ())
("joseph")
())
(define-struct node (name birth eyes father mother))
(define family (make-node "camille" 2015 "brown"
(make-node "mark" 1988 "brown"
(make-node "george" 1963 "blue" empty empty)
(make-node "lisa" 1965 "brown" empty empty))
(make-node "jessica" 1990 "black"
(make-node "joseph" 1959 "blue" empty empty)
(make-node "Rebecca" 1964 "black" empty empty))))
(define (col-eyes fam color)
(cond
[(empty? fam) empty]
[(equal? (node-eyes fam) color)
(cons (node-name fam)
(append (col-eyes (node-father fam) color)
(col-eyes (node-mother fam) color)))]
[else (cons (col-eyes (node-father fam) color)
(col-eyes (node-mother fam) color))]
))
(col-eyes family "blue")
这就是我想要的:
(“乔治”“约瑟夫”)
,有人能帮忙吗?谢谢。不确定您使用的是哪种方案,因此我无法对此进行测试,但您可能需要一个附加
来代替最后一个cons
:
(define (col-eyes fam color)
(cond
[(empty? fam) empty]
[(equal? (node-eyes fam) color)
(cons (node-name fam)
(append (col-eyes (node-father fam) color)
(col-eyes (node-mother fam) color)))]
; right here v
[else (append (col-eyes (node-father fam) color)
(col-eyes (node-mother fam) color))]))
单击要删除的帖子中的删除链接。您需要登录并从浏览器中执行此操作。非常感谢!它非常有用!