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))]))

单击要删除的帖子中的删除链接。您需要登录并从浏览器中执行此操作。非常感谢!它非常有用!