我正在使用R5RS计划在Dr. Racket中运行此程序,我在行(+ 1 IntDivide((- x y) y))
上收到此错误:
“申请:不是程序;预期程序可以 适用于给出的参数:5个参数......:“
该过程应该使用减法返回两个整数之间的除法的商。由于这是一个家庭作业问题,我不会问我的解决方案是否正确(我可以稍后调试),而是导致此错误的原因。它似乎通常由多余的括号引起,但我似乎无法找到它们。任何帮助将不胜感激。
(define IntDivide (lambda (x y)
(if (eqv? (integer? x) (integer? y))
(begin
(if (= y 0)
(begin
(write "Can't divide by zero") (newline)
-1
)
)
(if (= (- x y) 0)
1
)
(if (< x y)
0
)
(if (> x y)
(+ 1 IntDivide((- x y) y))
)
)
)
(write "Please only input integers")
))
提前致谢!
答案 0 :(得分:3)
除了在parens中移动操作员之外,还需要将if
替换为cond
:
(define IntDivide
(lambda (x y)
(if (eqv? (integer? x) (integer? y))
(cond ((= y 0) (write "Can't divide by zero")
(newline)
-1)
((= x y) 1)
((< x y) 0)
((> x y) (+ 1 (IntDivide (- x y) y))))
(write "Please only input integers"))))
你现在的方式,内部if表达式,将无法正常工作,因为它们不会自动返回。他们只是评估然后结果被扔掉了。
答案 1 :(得分:2)
以与其他任何功能相同的方式呼叫IntDivide
。
(+ 1 (IntDivide (- x y) y))