我有这个家谱,我想提取一个清单,列出所有蓝眼睛的人的名字。
但我不断获得列表列表:
'((("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")
这就是我想要的:'("george" "joseph")
,有人可以帮忙吗?谢谢。
答案 0 :(得分:1)
不确定您使用的是哪种方案,因此我无法对其进行测试,但是您可能希望用append
代替最后一个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))]))