2011-06-17 10 views
4

RebolのPARSE方言は、文字列だけでなく記号構造に対してもパターンマッチングと抽出ができるように一般化されています。同じルールで文字列解析とブロック解析を混在させるにはどうすればよいですか?

; match a single "a" character, followed by any number of "b" chars 
>> string-rule: ["a" some "b"] 

>> parse "abb" string-rule 
== true 
>> parse "aab" string-rule 
== false 

; look for a single apple symbol, followed by any number of bananas 
>> block-rule: ['apple some 'banana] 

>> parse [apple banana banana] block-rule 
== true 
>> parse [apple apple banana] block-rule 
== false 

しかし、のは、私はリンゴのシンボルを含むブロックを探しているとしましょう、その後、string-ruleに一致する文字列の任意の数:

; test 1 
>> parse [apple "ab" "abbbbb"] mixed-rule 
== true 

; test 2 
>> parse [apple "aaaa" "abb"] mixed-rule 
== false 

; test 3 
>> parse [banana "abb" "abbb"] mixed-rule 
== false 

はどのようなmixed-ruleを策定するでしょう。このような?一見自然な答えが動作していないよう

http://www.rebol.net/wiki/Parse_Project#INTO

>> mixed-rule: ['apple some [string! into ["a" some "b"]]] 

それはテスト1を通過して、正しくテストのためにfalseを返しますが、それは1がINTO使用できることを示唆しているドキュメントを見てみます3、それは間違ってテスト2で真を返します。これは私の間違いかRebol(私はr3 A111を使用しています)のバグですか?

答えて

3

SteeveオーバーREBOL3 forumこの示唆に:

only the second string is checked. 
Should be: 
    ['apple some [and string! into ["a" some "b" ]]] 
+0

うーん...あなたは、ANDで投げたら、はい、これは確かに動作します。それがバグの回避策であるのか、それともなぜそれが必要なのかについて一貫した推論があるかどうかは分かりますか? – HostileFork

+0

コヒーレント推論:一般的なルールは、一致が成功すると(上記の場合は次の文字列に)一致する位置が前進することです。要素を2回(STRING!とINTOを使用して)一致させたい場合は、ANDキーワードを使用する必要があります。 – Ladislav

関連する問題