0

私は楽しみのためにREBOLを調べ始めました.プログラミング言語のファンとして、新しいアイデアや代替構文を見るのが本当に好きです. REBOLは間違いなくこれらでいっぱいです。私が気づいたことの 1 つは、パス演算子として「/」を使用していることです。これは、「.」と同様に使用できます。ほとんどのオブジェクト指向プログラミング言語の演算子。私は REBOL で広範囲にプログラミングしたわけではなく、いくつかの例を見てドキュメントを読んだだけですが、'/' 演算子にあいまいさがない理由が明確ではありません。

x: 4
y: 2
result: x/y

私の例では、これは除算でなければなりませんが、x がオブジェクトまたは関数の絞り込みである場合は、同じように簡単にパス演算子になり得るようです。REBOL はあいまいさをどのように処理しますか? オーバーロードされた演算子と型システムの問題なので、実行時までわかりませんか? それとも、文法に欠けているもので、本当に違いがありますか?

更新良いサンプルコードが見つかりました:

sp: to-integer (100 * 2 * length? buf) / d/3 / 1024 / 1024

算術除算には空白が必要ですが、パス演算子には空白は必要ないようです。あれですか?

4

4 に答える 4

3

この質問は、構文の観点からの回答に値します。実際、Rebol には「パス演算子」はありません。はx/yパスと呼ばれる構文要素です。スタンドアロン/(スペースで区切られている) はパスではなく、単語 (通常は除算演算子として解釈されます) です。Rebol では、次のような構文要素を調べることができます。

length? code: [x/y x / y] ; == 4
type? first code ; == path!
type? second code

など

于 2013-01-25T00:18:34.447 に答える
2

コードガイドによると:

空白は、一般に(記号を区切るために)区切るために使用されます。

単語には+や-などの文字が含まれている可能性があるため、これは特に重要です。

http://www.rebol.com/r3/docs/guide/code-syntax.html

REBOlerになるために習得したスキルの1つは、他の言語では通常必要とされない式に空白を挿入するコツをつかむことです:)

于 2011-03-08T06:12:32.493 に答える
2

通常、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 です。まったく違う方言で意味を付けることができます...

于 2013-01-25T18:14:12.463 に答える
0

明確な説明が書かれたものは見つかりませんでしたが、+、-、* などは単語内の有効な文字であるため、明らかにスペースが必要であることもわかりました。

x*y

有効な識別子です

x * y

乗算を実行します。パス演算子は、これの単なる別のケースのようです。

于 2011-03-07T14:57:04.857 に答える