R6RS:翻訳:Standard Libraries:16 eval

R6RS:翻訳:Standard Libraries:16 eval

16 章 eval

(rnrs eval (6)) ライブラリを使うと、実行時に Scheme の式をデータとしてプログラムし、それを評価することができるようになる。

[procedure] (eval expression environment)

expression を指定された environment で評価し、その値を返す。 expression は構文上妥当な Scheme 式をデータとして表したものでなくてはならず、 environment は環境でなければならない。

eval の第一引き数が構文上正しい式でないことが確定した場合、 &syntax コンディション型の例外を発生させなければならない。特に、 eval の第一引き数が定義や、定義を含み外側に継ぎ合わされる begin であった場合も &syntax コンディション型の例外を発生させなければならない。

[procedure] (environment import-spec ...)

import-spec は <import spec> (R6RS:翻訳:R6RS:7.1 Library form参照)を表すデータでなければならない。 environment 手続きは import-spec に対応した環境を返す。

指定子によって表現された環境の束縛は変更不可能である。その環境の変数への代入がひとつでも含まれることがわかっている式に eval が適用された場合には &assertion コンディション型の例外を発生させなければならない。

(library (foo)
  (export)
  (import (rnrs)
          (rnrs eval))
  (write
    (eval ’(let ((x 3)) x)
          (environment ’(rnrs))))) 
  writes 3

(library (foo)
  (export)
  (import (rnrs)
          (rnrs eval))
  (write
    (eval
      ’(eval:car (eval:cons 2 4))
      (environment
        ’(prefix (only (rnrs) car cdr cons null?)
                 eval:))))) 
  writes 2
More ...