2

これは SICP の例です。入力しましたが、エラーが発生しました。

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))

これはエラーです:

関数呼び出し: 左括弧の後に関数が必要ですが、変数が見つかりました

4

2 に答える 2

5

DrRacket を使用している場合、DrRacket を「初心者向け言語」モードで実行している可能性があります。入門 CS レベルでは、その特定の言語レベル モードが高次機能を無効にします。 一方、 SICPは、より高次の手続きが可能な言語レベルを想定しています。

これが事実であると仮定すると、 DrRacket を調整して、 #lang racketなどの高次の手順を許可する言語レベルを使用することで、これを修正できます。

言語の選択を参照してください: DrRacket を「ソースで宣言された言語を使用する」に切り替え、プログラムの一番上の行を作成します。

#lang racket

これで、関数を記述できるようになります。


ちなみに、DrRacketの SICP には特別なサポートがあります。SICP を使用する場合は、おそらくこれを使用することをお勧めします。このサポートを有効にするには、先頭の#lang行を次のように変更します。

#lang planet neil/sicp

これでプログラムを初めて実行するときは、サポート ソフトウェアが自動的にインストールされるため、少し時間がかかります。その後のパッケージの使用は高速である必要があります。

于 2012-10-08T17:59:06.963 に答える
2

プロシージャを呼び出す方法に問題があると思います。たとえば、これは上記のコードで正常に機能します。

(sum values 1 add1 10)
> 55
于 2012-10-08T17:24:25.013 に答える