単語を含むブロックのブロックの単純化された例を想像してみてください。
samples: [
[a a c a]
[a a c b]
[b a c a]
[c a c b]
[c c c c]
]
各ブロックはである必要があります[c c c c]
。したがって、値が、の場合、値は'a
に変更され'b
ます。値がの場合は'b
、に変更され'c
ます。値がの場合、'c
「C」を出力して次に進みます。
repeat i length? samples [
prin ["^/Sample" i "- "]
parse samples/:i [
some [
s: 'a (change s 'b) :s
| s: 'b (change s 'c) :s
| 'c (prin "C")
]
]
]
Rebol 2では、これは期待どおりに機能します。
Sample 1 - CCCC
Sample 2 - CCCC
Sample 3 - CCCC
Sample 4 - CCCC
Sample 5 - CCCC
しかし、Rebol 3には問題があるようです(バグ?):
Sample 1 -
Sample 2 -
Sample 3 -
Sample 4 - C
Sample 5 - CCCC
それが関連しているかどうかはわかりませんが、Rebol2とRebol3の間で解析する変更のリストを含むRebolWikibookには次のように書かれています。
いくつかのサブルール-R3での不要な無限ループを防ぐために、このルールは、サブルールが入力と一致するがそれを進めない場合にも停止します
(注:StackOverflowチャットで@rgchrisによって提供されたこの簡略化された例は、 「組織の知識」をより適切に保持し、更新を許可するためにここで繰り返されます。)