在Scheme中编写代码时,错误
应用程序:不是过程;
期望可以应用于参数的过程
给定:1
出现。我应该使用Heron公式来计算三角形面积的公式。
这是我的代码:
using namespace
再次输出为:
应用程序:不是过程;
期望可以应用于参数的过程
给出:1
参数...:[无]
答案 0 :(得分:1)
您的括号太多:
(define (s a b c)
(/ (+ a b c) 2))
(define (area a b c)
(sqrt (* (- (s a b c) a)
(- (s a b c) b)
(- (s a b c) c))))
在C之类的语言中,您总是可以添加更多的括号。在Scheme中,多余的括号总是错误。我可能会这样写函数:
(define (area a b c)
(let ((s (/ (+ a b c) 2)))
(sqrt (* s (- s a) (- s b) (- s c)))))
此处 s 仅计算一次,因此不需要辅助过程。这是一个示例:
> (area 3 4 5)
6
您可以在https://ideone.com/Co94oe上运行程序。顺便说一句,将括号放在行尾而不是将其移到自己的一行是正确的形式。
答案 1 :(得分:0)
除了user44810的完全正确答案外,让我鼓励您考虑使用DrRacket的步进器来识别错误。在这种情况下,您将在错误显示您将要作为过程调用结果之前看到步骤。