Pot*_*ker 0 scheme runtime-error function contract racket
我有以下代码:
(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))
Run Code Online (Sandbox Code Playgroud)
(对不起,如果我的代码看起来很糟糕,只需要使用这种语言一次)
编译器说:
count: contract violation
expected: procedure?
given: 6
argument position: 1st
other arguments...:
'(3 5 3 1 22 2)
Run Code Online (Sandbox Code Playgroud)
您正在交互区域中输入代码。
别。在源代码区输入,并加载。然后它起作用了。
发生的情况是,该函数count
已经存在,而您正在重新定义它。但是如果你在交互区域这样做,你的新函数将使用已经存在的函数,而不是像它应该的那样递归调用自己:
(define (count val l)
(if (null? l)
0
(+
(if (= (first l) val) 1 0)
(count val (rest l)) ;; ****** HERE
)
)
)
Run Code Online (Sandbox Code Playgroud)
现有函数需要一个过程作为它的第一个参数,如其文档中所示。
归档时间: |
|
查看次数: |
59 次 |
最近记录: |