3

関数型言語は初めてで、Racket を使用して SICP プログラミングの割り当てを行っています。

以下はコードのスニペットで、Racket はdefine: expected only one expression for the function body, but found 5 extra parts5 行目 ( (define (y k))で次のように通知します。

(define (simpson f a b n)

 (define h (/ (- b a) n))

 (define (y k)
  (f (+ a (* k h))))

 (define (factor k)
  (cond ((or (= k 0) (= k n))
         1)
   ((odd? k)
    4)
   (else
    2)))

 (define (term k)
  (* (factor k)
   (y k)))

 (define (next k)
  (+ k 1))

(if (not (even? n))
 (error "n can't be odd")
 (* (/ h 3)
  (sum term (exact->inexact a) next n))))

この問題は言語設定に関連していると思いますが、私はすでに「高度な」オプションを使用しています。

ラケットを適切に構成する方法を知っている人はいますか、または内部の「定義」はサポートされていませんか?

4

1 に答える 1

7

確かに、あなたが言うように: internaldefineは Advanced 言語ではサポートされていません。neil/sicpSICP 演習を行うには、パッケージを使用するのが最善であると言われました。これを使用する手順については、こちらで詳しく説明しています

ただし、標準の Racket 言語 ( #lang racket) でも問題なく内部defines をサポートします。

于 2012-10-27T12:49:47.393 に答える