2014-10-18 65 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)))]))