3

シナリオ 1:

red>> sizes: [small medium large]
== [small medium large]
red>> print sizes
*** Script error: small has no value
*** Where: print

シナリオ 2:

red>> print first sizes
small

シナリオ 1 と 2 が同じ動作をすることを期待していました (評価時にエラーが発生するか、シンボルとして扱われる)。

次のシナリオがprintRed/Rebol の概念に固有のものなのか、理解する必要があるのか​​ を理解しようとしています。

ブロック内のすべての単語が記号として扱われ、(必要に応じて) それらを評価する関数が必要であることを理解しています。したがって、シナリオ 1 は理にかなっています。しかし、( を使用して) ブロックから単語を抽出するfirstと、それは記号のままですか?

4

3 に答える 3

4

あなたの理解は正しく、2 つのシナリオでの動作は に固有のものprintであり、より具体的にはreduce(reduceは の代替評価方法ですdo) に固有のものです。基本的には、、 、結果の文字列を に送信するprintという 3 ステップのプロセスです。reduceformsystem/ports/output

>> message: "Hello"
== "Hello"

削減message:

>> reduce message
== "Hello"

ブロックを減らします:

>> reduce [message]
== ["Hello"]

Reduce 'message(単語 に評価message):

>> reduce 'message
== message

Reduce first [message](単語 に評価message):

>> reduce first [message]
== message

あなたのシナリオでは、ブロックの縮小を先取りすることで評価を回避できます。

>> reduce form [small medium large]
== "small medium large"

>> print form [small medium large]
small medium large
于 2015-04-19T18:06:47.070 に答える