Scheme 错误:应用程序:不是一个过程;应为可应用于参数的过程
在Scheme中编写代码时 应用:不是一个程序; 应为可应用于参数的过程 给定:1 出现了。我应该用Heron公式来计算三角形面积的公式 这是我的密码:Scheme 错误:应用程序:不是一个过程;应为可应用于参数的过程,scheme,racket,Scheme,Racket,在Scheme中编写代码时 应用:不是一个程序; 应为可应用于参数的过程 给定:1 出现了。我应该用Heron公式来计算三角形面积的公式 这是我的密码: (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))) ))) 同样,输出是: 应用:不是一个程序
(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)))
)))
同样,输出是:
应用:不是一个程序;
应为可应用于参数的过程
给定: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
您可以在运行该程序。顺便说一下,把线括号放在直线的末端,而不是把它们移到自己的直线上是正确的形式。< P>除了USER4810完全正确的答案外,让我鼓励你们考虑使用DrRePink的步进器来识别错误。在本例中,您将看到在错误显示您将作为过程调用结果之前的步骤。亚历山大港的Heron大约在2000年前就发现了这个问题。你错过了s的乘法运算。您应该只计算一次sabc,然后将结果存储在一个临时变量中。