方案 - '申请:不是程序'错误

时间:2016-03-23 22:41:54

标签: scheme

我有以下程序:

(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)部分声明。 为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

请注意,在Scheme中,(foo bar baz)相当于JS中foo(bar, baz)的相似内容,而(foo)相当于foo()((foo))相当于foo()()#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct test_t { char (*p)[20]; } test; int main(int argc, char **argv) { test t; t.p = malloc(2 * sizeof(*t.p)); strcpy(t.p[0], "hello"); strcpy(t.p[1], "world"); printf("[%s]\n", t.p[0]); printf("[%s]\n", t.p[1]); free(t.p); } 。你不能无缘无故地添加括号。