方案 - '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) 部分。
为什么会这样?
谢谢!
n
和 m
是(我推测)数字,而不是程序。你不能打电话给他们。然而,当您说 (n)
和 (m)
时,这正是您想要做的。等价于 JavaScript.
中的表达式 n()
和 m()
记住,在Scheme中,(foo bar baz)
相当于JS中的foo(bar, baz)
,(foo)
相当于foo()
,((foo))
相当于 foo()()
。你不能随意添加括号。
我有以下程序:
(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) 部分。 为什么会这样?
谢谢!
n
和 m
是(我推测)数字,而不是程序。你不能打电话给他们。然而,当您说 (n)
和 (m)
时,这正是您想要做的。等价于 JavaScript.
n()
和 m()
记住,在Scheme中,(foo bar baz)
相当于JS中的foo(bar, baz)
,(foo)
相当于foo()
,((foo))
相当于 foo()()
。你不能随意添加括号。