2

ガイルインタプリタの形でフロントエンドとして提供する、meep と呼ばれる電磁気シミュレータが存在します。シミュレーターは、一連のスキーム マクロで構成されています。

次のエラーの意味を理解しようとしています。コードはチュートリアルから取得されます。プロシージャでチュートリアルをラップすると、実行時エラーが発生し、インタプリタ (ガイル) が何を言っているのかわかりません。

動作しないコード

(define diffthick
  (lambda (n) ; n doesn nothing
    (
     (set! geometry-lattice (make lattice (size 16 8 no-size)))
     (set! geometry (list
                      (make block (center 0 0) (size infinity 1 infinity)
                            (material (make dielectric (epsilon 12))))))
     (set! sources (list
                     (make source
                           (src (make continuous-src (frequency 0.15)))
                           (component Ez)
                           (center -7 0))))
     (set! pml-layers (list (make pml (thickness 1.0))))
     (set! resolution 10)
     (run-until 200
                (at-beginning output-epsilon)
                (at-end output-efield-z))
     )
    )
  )
(diffthick 3)

作業コード (手順なし)

(set! geometry-lattice (make lattice (size 16 8 no-size)))
(set! geometry (list
                (make block (center 0 0) (size infinity 1 infinity)
                      (material (make dielectric (epsilon 12))))))
(set! sources (list
               (make source
                 (src (make continuous-src (frequency 0.15)))
                 (component Ez)
                 (center -7 0))))

(set! pml-layers (list (make pml (thickness 1.0))))
(set! resolution 10)
(run-until 200
           (at-beginning output-epsilon)
           (at-end output-efield-z))

エラー

creating output file "./eps-000000.00.h5"...
creating output file "./ez-000200.00.h5"...
run 0 finished at t = 200.0 (4000 timesteps)

Backtrace:
In standard input:
  21: 0* [diffthick 3]
   3: 1  [#<unspecified> #<unspecified> #<unspecified> ...]

standard input:3:5: In expression ((set! geometry-lattice #) (set! geometry #) (set! sources #) ...):
standard input:3:5: Wrong type to apply: #<unspecified>
ABORT: (misc-error)

働く

-----------
creating output file "./eps-000000.00.h5"...
creating output file "./ez-000200.00.h5"...
run 0 finished at t = 200.0 (4000 timesteps)

結局のところ、何かが二重に評価されているような気がします。しかし、それが何であるかはわかりません。

4

1 に答える 1

5

このエラーは、コードが(set! geometry-lattice #)関数であるかのように結果を適用しようとしているが、set!結果が#<unspecified>代わりに適用されていることを示しています。これは、一連のset!s が括弧で囲まれているために発生します。

あなたはおそらく探している

(begin
  (set! geometry-lattice ...)
  ...
  (run-until ...))

または、ラムダ本体は暗黙的にbegin.

于 2013-01-08T23:00:33.610 に答える