【问题标题】:Scheme - 'application: not a procedure' error方案 - “应用程序:不是程序”错误
【发布时间】:2016-03-23 22:41:54
【问题描述】:

我有以下程序:

(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))

    ))
  ))

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

但是,当我运行它时,我得到了错误:

应用程序:不是程序;
期望一个程序可以 应用于参数
给定:0.5
参数...:[无]

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

谢谢!

【问题讨论】:

    标签: scheme


    【解决方案1】:

    nm 是(我认为)数字,而不是程序。你不能打电话给他们。然而,当你说(n)(m) 时,这正是你想要做的。相当于 JavaScript 中的 n()m() 表达式。

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

    【讨论】:

    • 所以我想我只需要使用不带括号的 m 和 n 调用循环?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多