For Development HEAD DRAFTSearch (procedure/syntax/module):

6.20 eval と repl

Function: eval expr env

[R7RS eval] exprを環境env内で評価します。 Gaucheにおいて、envは単なる<module>オブジェクトです。

R5RSとR7RSは、環境envを得るポータブルな方法を定義しています。 R5RSの方法を以下に示します。R7RSの方法はscheme.eval - R7RS evalを参照してください。

Function: null-environment version
Function: scheme-report-environment version
Function: interaction-environment

[R5RS] evalの第2引数として使われる環境識別子を返します。 現時点では、環境識別子は単にモジュールです。 (null-environment 5)は、R5RSで規定されている単なる構文的な 束縛を含むnullモジュールを返します。 (scheme-report-environment 5)は、R5RSで規定されている 構文的な束縛と手続きの束縛を含むschemeモジュールを返します。 (interaction-environment)は、全てのGaucheのビルトインと ユーザ定義の全てを含んだuserモジュールを返します。 将来、Gaucheがファーストクラスの環境オブジェクトを採用する可能性が あるので、環境識別子が単なるモジュールであることを当てにしないで 下さい。

引数versionに5以外の値を渡すとエラーが通知されます。

Function: read-eval-print-loop :optional reader evaluator printer prompter

goshのデフォルトのread-eval-printループをアプリケーションに エクスポートします。それぞれの引数は、Gaucheのデフォルトの手続きを使うことを 示す#fであっても良いですし、以下の条件を満たす手続きであっても構いません。

reader

引数を取らない手続きです。式を読み込んでそれを返すことを期待されます。

evaluator

式と環境識別子を2引数として取る手続きです。式を評価して、0個以上の値を 返すことを期待されます。

printer

0個以上の引数を取る手続きです。それらの値を出力することを期待されます。 この手続きの戻り値は無視されます。

prompter

引数を取らない手続きです。プロンプトを出力することを期待されます。 この手続きの戻り値は無視されます。

これらの手続きが与えられると、read-eval-print-loopは以下のように 動作します。

  1. prompterを呼んでプロンプトを出力します。
  2. readerを呼んで式を読み込みます。EOFが返されたら、ループを終了し read-eval-print-loopから戻ります。
  3. evaluatorを呼んで式を評価します。
  4. printerを呼んで結果を出力し、その後、1から繰り返します。

これらの手続きのうちの1つからエラーが通知されると、そのエラーは デフォルトのエスケープハンドラにより捕捉・報告され、その後、 ループが1から再開します。

これらの手続きの内部で継続を捕捉し、後で再起動することは 許されています。

註: gauche.interactiveではREPLでの行編集をサポートする read-eval-print-loop手続きを定義しています。 gauche.interactiveをインポートした場合、Gaucheの元の read-eval-print-loopがシャドウされるかもしれないことに注意してください。 gauche.interactiveread-eval-print-loopは 同じインタフェースを持ちますが、ユーザが提供するreaderは無視されます。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT