2017-12-27 16 views
-1

MITスキーム:私はフィボナッチ数列(SICPのセクション1.2.2)のn番目の項を計算する関数を書いていたが、私はエラーになっています:未指定の戻り値をMITスキーム:指定なし戻り値エラー

(define (fib n) (
    define (fib-iter a b count) (
      if (= count n) a 
      (fib-iter b (+ a b) (+ count 1))) 
    (fib-iter 0 1 1)) 
) 

ありがとうございます。

+1

自分自身に好意を持って、「カッコをCの括弧で書く」習慣をつけてください。 Lispsはその構造を持っていません。 – molbdnilo

答えて

1

ヘルパー機能fib-iterには最後に閉じ括弧がありません。fibには別の閉じ括弧があります。その結果、行(fib-iter 0 1 1)fib-iterに含まれ、fibは実際に評価され返される式が含まれなくなるため、エラー... no expression in body ...となります。ここで

は何をしたいです:

(define (fib n) 
    (define (fib-iter a b count) 
    (if (= count n) 
     a 
     (fib-iter b (+ a b) (+ count 1)))) ; 1 closing bracket added here 
    (fib-iter 0 1 1))       ; 1 closing bracket removed here 

あなたは括弧に一致するいくつかのエディタを使用しての恩恵を受ける可能性があります。たとえば、Racket博士は、カーソルがカッコの開始または終了のいずれかでアクティブな場合、一連の括弧内に含まれる関数本体を強調表示します。

+0

ありがとうございました!私がしたことは、(私のために)構文的なエラーではなく概念的なエラーでした。 私がやっていたこと: (fib-iterの定義とfib-iterの定義)fibの定義( )あなたがしたことは、 (定義の定義fib-iter)(fib-iterの呼び出し)) – Apoorve

+0

実際、 'fib-iter'は単なるヘルパー関数です。正しく書かれたヘルパー関数は、その親関数から移動することができ、両方とも同じ振る舞いをする必要があります(スコープが異なるだけです)。あなたの元のバージョンで 'fib-iter'を' fib'から移動させた場合、 'fib'は次のように定義されます:'(define(fib n)) 'エラー。おそらくあなた自身のヘルパー関数を書くことは、各コンポーネントが何をしているのかをより概念的に理解するのに役立ちます。 – assefamaru

-2

間違った場所にかっこが付いています。

+1

申し訳ありませんが、どこに教えていただけますか? – Apoorve

関連する問題