Rebol の INTO を使用すると、パーサーは一連の型 (BLOCK! や PAREN! など) に降りて、ブロックの内容に一致ルールを適用できます。Rebol 3 の簡単な例を次に示します。
data: [(a b)]
parse data [into [pos: 'a 'b (
probe pos
either pos = (first data) [
print rejoin ["equal to original " mold first data]
] [
print rejoin ["not equal to original " mold first data]
]
)]]
ブロック内の唯一のものは括弧で囲まれたシリーズであるため、INTO ルールはすぐに一致します。SET-WORD! を使用して、パーサーは の括弧に入ると位置を取得するように指示されpos
ます。A と B はリテラルの LIT-WORD! として一致し、その後のコードが実行されます。期待される結果が発生します。
(a b)
equal to original (a b)
それは素晴らしいことです。しかし奇妙なことに、Rebol 2 は同じコードの括弧をブロックに変換します。
[a b]
not equal to original (a b)
data: [a/b]
入力が次の場合、同じブロック変換が発生します。
[a b]
not equal to original a/b
なぜこれが起こるのですか?Rebol 2 を使用している場合、Rebol 3 の動作を取得する方法はありますか?