scheme - scheme - 球拍:预期:过程?

  显示原文与译文双语对照的内容

我有以下代码:


(define numbers '(2 3 5 3 1 22 2))



(define (count val l) 


 (if (null? l)


 0


 (+


 (if (= (first l) val) 1 0)


 (count val (rest l)) 


 )


 )


)



(display (count 6 numbers))



对不起,如果代码看起来很糟糕,只需要使用这种语言一次)

编译器显示:


count: contract violation


 expected: procedure?


 given: 6


 argument position: 1st


 other arguments...:


 '(3 5 3 1 22 2)



时间:

在交互区域中输入代码。

不要,在源代码区域中输入它,然后加载它,然后它就工作了。

发生了什么,函数count已经存在,你正在重新定义它,但是,如果你在交互区域中这样做,你的新函数使用现有的函数,而不是递归地调用它本身:


(define (count val l) 


 (if (null? l)


 0


 (+


 (if (= (first l) val) 1 0)


 (count val (rest l)) ;; ****** HERE


 )


 )


)



现有函数期望过程作为它第一个参数,在它的文档中可以看到。

...