Gaucheによるevalについて

  • 3
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

GaucheのevalはCLispのと違って、第二引数に環境指定子を与える必要があります。

で、環境指定子ってなんだという話ですが、スコープです。
はい。

; 基本的にはuser moduleにいます
gosh> (interaction-environment)
#<module user>
gosh> (define x "this is interaction-env")
x
gosh> x
"this is interaction-env"

; 別のスコープで同名の識別子でも環境指定子の従ったスコープを評価します
gosh> (let1 x "hoge" (eval 'x (interaction-environment)))
"this is interaction-env"

; オリジナルのモジュールを定義することもできます
gosh> (define-module mymodule)
#<undef>
;; 呼び出してみましょう
gosh> (with-module mymodule (define x "this is mymodule"))
x
gosh> (eval 'x (find-module 'mymodule))
"this is mymodule"

これで安心してファーストクラスオブジェクトの定義ができます。
よかったですね。