1 回答
TA贡献1829条经验 获得超9个赞
在这一行中,您multBins使用(cons 0 x)和进行调用(rest y),并得到一些结果r,然后尝试调用r:
((= (first y) 0) ((multBins (cons 0 x) (rest y))))
; ^ ^
; +--- function application -----+
在下一行中,您正在addWithCarry使用一些参数进行调用,获取结果r并尝试调用r:
(#t ((addWithCarry x (multBins (cons 0 x) (rest y)) 0)))))
; ^ ^
; +-------------- function application -------------+
可能'(0 0 0 1 0 1 1)是其中之一返回了不适用的值。
在非常简化的情况下,请考虑DrRacket REPL的以下记录:
> (define (value) ; a function that returns the
'(0 0 0 1 0 1 1)) ; same value that yours should
> (value) ; calling it produces the value
(0 0 0 1 0 1 1)
> ((value)) ; calling it and then calling
; return value causes the same
; error that you're seeing
; application: not a procedure;
; expected a procedure that can be applied to arguments
; given: (0 0 0 1 0 1 1)
; arguments...: [none]
您没有提到您使用的是什么编辑器/ IDE /调试器,但是其中一些应该使它更容易发现。例如,当我打开你的代码(减去调用test,其定义我没有,用的定义first和rest),DrRacket凸显违规调用的位置:
虽然我已经指出了两个有问题的调用,但都需要修复,但是您现在看到的错误是在这两个中的第二个发生。
- 1 回答
- 0 关注
- 372 浏览
添加回答
举报