通常、Rebol ではスペースが必要ですが、シリーズを区切るような「特殊な」文字には例外があります。例えば:
[a b c]
と同じです[ a b c ]
(a b c)
と同じです( a b c )
[a b c]def
と同じです[a b c] def
構文要素のイントロスペクションを行うためのかなり強力なツールにはtype?
、quote
、 、およびprobe
. 引用演算子は、インタープリターが物事に振る舞いを与えるのを防ぎます。したがって、次のようなことを試した場合:
>> data: [x [y 10]]
>> type? data/x/y
>> probe data/x/y
コードの「ライブ」の性質は、パスを掘り下げてinteger!
価値のあるものを提供します10
。ただし、引用符を使用する場合:
>> data: [x [y 10]]
>> type? quote data/x/y
>> probe quote data/x/y
次にpath!
、値が単にdata/x/y
である a にたどり着き、評価されることはありません。
内部表現では、PATH! BLOCK! によく似ています。またはPAREN!この特別な独特の字句タイプを持っているだけで、異なる扱いが可能です。オブジェクトまたはシリーズからメンバーを選択することで「ドット」のように振る舞うことができますが、それは DO ダイアレクトによって使用される方法にすぎません。独自のアイデアを発明することができます。たとえば、「ラッセル」コマンドを作成するとします。
russell [
x: 10
y: 20
z: 30
x/y/z
(
print x
print y
print z
)
]
30
私の空想的な例で、これが , 10
, ... を出力すると想像してください。これ20
は、russell 関数が行うことは、パスが値をシフトする命令として扱われるような方法でそのブロックを評価するためです。したがってx/y/z
、x=>y、y=>z、および z=>x を意味します。次に、括弧内のコードは DO 方言で実行されます。割り当ては通常どおりに処理されます。
自分自身を表現するための楽しい新しいリフを作成したい場合、Rebol は面倒な作業の多くを処理します。したがって、たとえば、かっこは、 を取得するために一致することが保証されていparen!
ます。自分ですべてを探しに行く必要はありません。さまざまなタイプのビルディング ブロックから方言を構築し、既存の動作 (数学や一般的な計算などの基礎のための DO 方言など) に接続するだけです。かなり驚くべきパターン マッチング マッスルのための驚異的な PARSE 方言)。
しかし、「これらすべての異なるタイプ」について言えば、別のタイプを作成できるスラッシュの奇妙な状況がさらにあります。
>> type? quote /foo
これは a と呼ばれ、字句要素をスラッシュで開始refinement!
すると発生します。オプションのパラメーター セットを関数に呼び出すために、DO 方言で使用されていることがわかります。しかし、繰り返しになりますが、これはパーツ ボックスに入っているもう 1 つの象徴的な LEGO です。まったく違う方言で意味を付けることができます...