2

演習としてスキーム パーサーを作成しようとしていますが、ベクトル構文の実装方法がわかりません。仕様は、ベクトルを入力する方法は であり、そのようなベクトルは に評価される必要があることを示しているよう'#(1 2 3)です#(1 2 3)。しかし、Scheme の実装をいくつか試したところ、#(1 2 3)有効な入力としても受け入れられました。これは仕様への普遍的に実装された拡張機能ですか?

4

3 に答える 3

1

まったく普遍的ではありません。たとえばChickenでは、引用符で囲まれていないベクトルを評価することはできません。

#;1> #(1 2 3)

Error: illegal non-atomic object: #(1 2 3)
#;1> '#(1 2 3)
#(1 2 3)
于 2013-09-05T16:46:51.227 に答える
1

R 5 RS 仕様によると、ベクトルは引用符で囲む必要があります。

これはベクトルの外部表現であり、ベクトルに評価される式ではないことに注意してください。リスト定数と同様に、ベクトル定数は引用符で囲む必要があります。

'#(0 (2 2 2 2) "Anna") 

一部の実装では、引用符で囲まれていないベクトルの評価を許可することを選択していますが、そのような拡張は非標準であり、その特定の実装の「機能」です。


価値があるのは、次のR 7 RS 仕様では、自己評価するベクトルが明示的に要求されていることです。

ベクトル定数は自己評価型であるため、プログラムで引用する必要はありません。

于 2013-09-05T18:05:56.103 に答える