2014-10-18 66 views
0

我遇到了一个使用DrRacket的小问题。我已经在C,C++,Java,Python等中进行了相当广泛的编程,但从未使用过函数式编程语言,因此我被绊倒了。树中节点的属性列表

我有一个节点,我需要返回该节点的“眼睛颜色”功能列表,以及它的所有父元素(以及父母的父母等)。这就是我所拥有的,我无法弄清楚我要出错的地方。我怀疑这与所有我不得不补充的“空洞”有关,因为我没有真正得到这些。这么多该死的括号,哈哈。这样做一切正常,但还有一堆其他空间或其他东西,而不是一个列表。

(define (eye-colors f) 
    (cond [(empty? f) empty] 
     [ else (cons (cons (child-eyes f) (eye-colors (child-mom f))) (eye-colors (child-mom f)))])) 

我对一个特定节点的输出是这样的:

(list 
(list 
    'blue 
    (list 'green (list 'brown)) 
    (list 'blue)) 
(list 'orange)) 

当它应该是这样的:

(list 'blue 'green 'brown 'blue 'orange) 

任何帮助,您可以提供非常感谢!

+0

这只是列表展平功能的特殊情况(尽管使用结构而不是作为输入的conses)。有许多方法可以编写扁平函数,包括http://stackoverflow.com/a/7324493/13和http://stackoverflow.com/a/13548087/13。 – 2014-10-18 03:46:20

回答

0

Got it!由于缺点,问题是嵌套列表。通过将第一个缺点转换为附加来解决问题,现在一切正常。工作代码如下。

(define (eye-colors f) 
    (cond [(empty? f) empty] 
     [ else (append (cons (child-eyes f) (eye-colors (child-mom f))) (eye-colors (child-dad f)))]))