1

私は、MIT SCHEME を実装する SCMUTILS パッケージを少し使用しています。Emacs から実行していますが、関数を使用する際に問題が発生しました。

私のコードは次のとおりです。

(define ((((delta eta) f) q) t)
  (let ((fmas (f (+ q (* 0.001 eta))))
         (efe (f q)))
       (/ (- (fmas t) (efe t)) 0.001)))


(define ((G q) t)
       (dot-product (q t) (q t)))


(((((delta  test-path) G)  test-path) 5))

テストパスは次のとおりです。

(define (test-path t)
 (up (+ (* 4 t) 7)
     (+ (* 3 t) 5)
     (+ (* 2 t) 1)))

そして、私はこのエラーが発生しています:

Loading "mecanica"...
;Application of a number not allowed 2501.2500000000273 (())

何が問題なのですか?

最初は、scheme は構造体をtest-path数値で割ることができないと思っていたので、ドット積を入れて数値を返す関数にしました。しかし、それはうまくいきませんでした。

関数で式を印刷しようとしましたdelta-etaが、この部分の実行中にエラーが発生しました。

(/ (- (fmas t) (efe t)) 0.001)))

そして、商の部分を取り出せば、エラーはありません。

確かに私は何かが欠けています。お役に立てれば幸いです。ありがとう!

4

1 に答える 1

0

これを仮定します

(define ((((delta eta) f) q) t)
  (let ((fmas (f (+ q (* 0.001 eta))))
         (efe (f q)))
       (/ (- (fmas t) (efe t)) 0.001)))

これに等しい

(define (delta eta)
  (lambda (f)
    (lambda (q)
      (lambda (t)
        (let ((fmas (f (+ q (* 0.001 eta))))
              (efe (f q)))
          (/ (- (fmas t) (efe t)) 0.001))))))

次に、 とを(((((delta test-path) G) test-path) 5))乗算0.001します。また、 の内部でも、プロシージャとして期待されますが、に数値を渡すことからプロシージャを取得しています。したがって、これは計算された数値の受け渡しを適用しようとします。test-path(* 0.001 eta)GqfmasGGt

于 2015-04-03T20:48:59.667 に答える