2013-02-13 67 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