只今記号操作中

 | 

2008-02-11

[][][][] ステップ実行eval開発中(4) 07:48

できた。eval拡張パッチが。

さっきのコメントは、((lambda () ...) ...)のような、car部分がlistになってるものについてだった。気にしなくてよかった。

R5RSのevalの項目も確認した。

expression は,データとして表現された一つの妥当な Scheme 式でなければならず,(以下略)

実装は eval を,第1引数として式以外のプログラム (定義) を許したり,環境として他の値を許すように拡張してもよい(以下略)

  • 最初の引用の「データとして表現された一つの妥当な Scheme 式」が、純粋なS式だけじゃなく「内部表現」も含んでれば、大丈夫。
    • でも、これは微妙そうな気はする。
  • 或いは、二番目の引用の「式以外のプログラム (定義)」にあてはまればok。
    • とりあえず手続きはこの定義にあてはまりそうだけど、マクロとspecial formはちょっと微妙かも……。

おそらく大丈夫だと思われるが、ちょっと微妙かも知れない。


もう少し、細かいパターンの条件分岐のチェックと動作確認が終わったらWiLiKiに提出してみる。

shiroshiro 2008/02/11 08:54 マクロやsyntaxの実体がcar部に来た時にそれをマクロや構文キーワードが来たかのように扱うのはfirst class macroとか呼ばれたりしますが、一貫性のある意味づけが難しいんですよ。
例えばそれを許すと
(for-each (lambda (z) (z #t ’ok (destroy-the-world))) if)
みたいな書き方をされた時にどうするの、とか。

ranekovranekov 2008/02/11 11:26 ちょっと長くなったので、返事はWiLiKiの方に書きます。
(修正にcompile.scmのpass1/lookup-headを修正したら、これがpass1/bodyからも呼ばれてたので、そっちに影響を与えないかの検証が終わってから……)

ranekovranekov 2008/02/11 18:54 あれから色々考えて、確かに、実は奥が深くて、難しい事に気付きました……。
WiLiKiの方に、もう少し追記します。

トラックバック - http://d.hatena.ne.jp/ranekov/20080211/1202683713
 |