2013-02-13 28 views
1

我前幾天詢問我將如何開發一個函數one,它將消耗一個符號列表並返回相同的列表,但每個實例的cat翻倍。找出錯誤

因此,例如

(one (cons 'animal(cons 'table (cons 'cat (cons 'bread 
     empty))))) 

我會得到

(cons 'animal (cons 'table (cons 'cat (cons 'cat (cons 'bread 
    empty))))) 

我的繼承人部分

(define (one alos) 
    (cond [(empty? alos)empty] 
     [(symbol=? 'cat (first alos)) (cons (first alos) (cons (first alos) (one rest alos)))] 
     [else (cons (first alos) (one rest alos))])) 

我很奇怪,爲什麼我一直得到「一:預計只有1說法,但找到2'?

+0

如果你使用DrRacket,你會得到任何有用的紅色突出顯示有問題的表達「(一休息)」? – dyoo 2013-02-13 01:48:32

回答

2

你錯過了幾個括號,這應該修復它:

(define (one alos) 
    (cond [(empty? alos) empty] 
     [(symbol=? 'cat (first alos)) 
     (cons (first alos) (cons (first alos) (one (rest alos))))] 
     [else (cons (first alos) (one (rest alos)))])) 

請注意,您是遞歸調用one這樣的:

(one rest alos) 

但將它正確的方法是這個:

(one (rest alos)) 
2

看看這裏: [(symbol=? 'cat (first alos)) (cons (first alos) (cons (first alos) (one rest alos)))] 這裏: ​​

什麼叫有one