List 树中节点的属性列表
我在和DrRacket合作时遇到了一个小问题。我在C、C++、java、python等程序中编程得很广泛,但以前从未使用过函数式编程语言,所以我被绊倒了。 我有一个节点,我需要返回该节点的眼睛颜色特征列表,以及它的所有父元素和父元素的父元素等。这是我所拥有的,我不知道哪里出了问题。我怀疑这与我必须添加的所有空白有关,因为我并没有真正理解这些。太多该死的括号了,哈哈。它把每件事都做好了,但是有一堆其他的空间或东西,而不是一个列表List 树中节点的属性列表,list,recursion,racket,nodes,List,Recursion,Racket,Nodes,我在和DrRacket合作时遇到了一个小问题。我在C、C++、java、python等程序中编程得很广泛,但以前从未使用过函数式编程语言,所以我被绊倒了。 我有一个节点,我需要返回该节点的眼睛颜色特征列表,以及它的所有父元素和父元素的父元素等。这是我所拥有的,我不知道哪里出了问题。我怀疑这与我必须添加的所有空白有关,因为我并没有真正理解这些。太多该死的括号了,哈哈。它把每件事都做好了,但是有一堆其他的空间或东西,而不是一个列表 (define (eye-colors f) (cond [(e
(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)
非常感谢您提供的任何帮助 明白了!由于存在缺点,问题是嵌套列表。通过将第一个cons切换为append解决了问题,现在一切都很好。工作代码如下
(define (eye-colors f)
(cond [(empty? f) empty]
[ else (append (cons (child-eyes f) (eye-colors (child-mom f))) (eye-colors (child-dad f)))]))
这只是列表展平函数的一个特例,尽管它使用struct而不是conses作为输入。有许多方法可以编写展平函数,包括和。