【发布时间】:2017-04-09 20:24:35
【问题描述】:
我正在使用 R5RS 方案在 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")
))
提前致谢!
【问题讨论】:
-
IntDivide不应该在右边的()里面吗? -
没错!我想在盯着太久之后你会得到隧道视觉。
-
我写 Clojure 的时间已经够久了,一看到
((,我就立刻产生了怀疑。有效代码可以连续包含 2 个左括号,但在 90% 的情况下,这是一个错误。请注意这一点。