方案 - 'application: not a procedure' 错误

Scheme - 'application: not a procedure' error

我有以下程序:

(define (myFunc x e)
  (let loop ((n x) (m e) (acc 2))
    (cond   
    ( (eqv? (abs (-   ( * (expt -1 (+ acc 1)) (/ (expt n acc) acc) )    ( * (expt -1 (+ acc 1)) (/ (expt n (- acc 1) ) (- acc 1)) ) )) m)
      (begin  (display "result is: ") (display acc) #f))
    (else
        (loop (n) (m) (+ acc 1))

    ))
  ))

您可以看到它计算值,检查是否相等,如果不成功,它会重复循环。

然而,当我 运行 它时,我得到错误:

application: not a procedure;
expected a procedure that can be applied to arguments
given: 0.5
arguments...: [none]

指向我的 'else' 语句后的循环 (n) 部分。 为什么会这样?

谢谢!

nm 是(我推测)数字,而不是程序。你不能打电话给他们。然而,当您说 (n)(m) 时,这正是您想要做的。等价于 JavaScript.

中的表达式 n()m()

记住,在Scheme中,(foo bar baz)相当于JS中的foo(bar, baz)(foo)相当于foo()((foo))相当于 foo()()。你不能随意添加括号。