Scheme 错误:应用程序:不是一个过程;应为可应用于参数的过程

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))) ))) 同样,输出是: 应用:不是一个程序

在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)))
         )))
同样,输出是:

应用:不是一个程序; 应为可应用于参数的过程 给定: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,然后将结果存储在一个临时变量中。