3

R6RS スキームで次の式を検討してください。

(syntax ())

この式を Racket に入力すると、(ラップされた) 構文オブジェクトが返されます。一方、同じ式は Chez スキームで (アンラップされた) 空のリストを生成します。

どのシステムが R6RS に準拠しているのか (または、両方の動作が標準で許可されているのか) 疑問に思っています。R6RS の関連する段落は、入力の解析と出力の生成です。そこには、次のように書かれています。

構文によって生成された出力は、次の規則に従ってラップまたはラップ解除されます... パターン変数を含まない の任意の部分のコピーは、ラップされた構文オブジェクトです。

テンプレートに(syntax ())はパターン変数が含まれていないため、結果はラップされた構文オブジェクトになるはずであり、Racket は正しいと思われます。

一方、Chez Scheme の作成者である R. Kent Dybvig はこのsyntax-caseシステムの発明者の 1 人であるため、Chez Scheme が標準に厳密に従うことが期待されます。

4

0 に答える 0