错误:应用程序:不是过程;期望可以应用于参数的过程

时间:2018-09-07 16:16:29

标签: scheme racket

在Scheme中编写代码时,错误

  

应用程序:不是过程;
   期望可以应用于参数的过程
    给定:1

出现。我应该使用Heron公式来计算三角形面积的公式。

这是我的代码:

using namespace

再次输出为:

  

应用程序:不是过程;
   期望可以应用于参数的过程
    给出:1
    参数...:[无]

2 个答案:

答案 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的步进器来识别错误。在这种情况下,您将在错误显示您将要作为过程调用结果之前看到步骤。