2016-03-23 4 views
0

I以下のプログラムを持っている:スキーム - 「アプリケーション:ないプロシージャ」エラー

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

(n)はループに私の「他の」ステートメントの後の部分を指差します。 なぜこれが起こっていますか?

ありがとうございます!

答えて

3

nおよびmは、手順ではなく数字であると仮定しています。あなたはそれらを呼び出すことはできません。そして、あなたが(n)(m)と言うとき、それはまさにあなたがやろうとしていることです。 JavaScriptの式n()m()に相当します。

(foo bar baz)はJSでfoo(bar, baz)の同類に相当し、(foo)foo()に相当し、((foo))foo()()に相当し、スキームには、覚えておいてください。かっこを無制限に追加することはできません。

+0

私はちょうどかっこなしでmとnとループを呼び出す必要があると思いますか? – Gambit2007

+0

正確に。 :-) :-) –

関連する問題