Iterace
Klíčová slova: some, any, opt, while.
Aplikace pravidla (rule) může být nepovinná nebo různým způsobem opakovaná.
Klíčové slovo či hodnota |
Popis |
3 <rule> |
opakovat pravidlo 3 krát |
1 3 <rule> |
opakovat pravidlo 1 až 3 krát |
0 3 <rule> |
opakovat pravidlo 0 až 3 krát |
some |
opakovat pravidlo jednou či vícekrát |
any |
opakovat pravidlo nula či vícekrát |
opt |
shoda s pravidlem žádná nebo jedna |
Určitý počet opakování - příklady
>> parse "fogfogfog" [3 "fog"] ; určeno přesně
== true
>> parse "fogfogfog" [0 5 "fog"] ; určeno rozsahem
== true
Neurčitý počet opakování - příklady
PARSE some, PARSE any, PARSE opt
Aplikuje pravidlo následného vnořeného bloku (jednou či vícekrát, nikdy nebo alespoň jednou, nikdy nebo jednou), dokud neselže nebo dokud lze ve vstupním bloku postupovat:
Red[]
a: [ "elk" "cat" "owl"]
parse a [ some ["elk"] ; jednou nebo vícekrát
"cat" "owl" ]
true
parse a [ some ["elk" "cat"] ; jednou nebo vícekrát
"owl" ]
true
parse a [ some ["fig"] ; nikdy
"elk" "cat" "owl" ]
false
parse a [ any ["elk"] ; nikdy nebo alespoň jednou
"cat" "owl" ]
true
parse a [ any ["elk" "cat"] ; nikdy nebo alespoň jednou
"owl" ]
true
parse a [ any ["fig"] ; nikdy nebo alespoň jednou
"elk" "cat" "owl" ]
true
parse a [ any ["fig"] ; nikdy nebo alespoň jednou
"elk" "owl" ]
false ; nikdy se vztahuje jen na subpravidlo any
parse a [ opt ["fig"] ; nikdy nebo alespoň jednou
"elk" "cat" "owl" ]
true
parse a [ opt ["elk" "cat"] ; nikdy nebo alespoň jednou
"owl" ]
true
parse a [ opt ["elk" "owl"] ; nikdy nebo alespoň jednou
"cat" ]
false *
* Pokud se vstup neshoduje s pravidlem opt, přeskočí parse toto pravidlo a kontroluje tentýž vstup následným pravidlem.
Jiný příklad pro opt:
hd: "horskádráha" ; řetězec s 11 elementy
parse hd [opt "horská" "dráha"] ; == true
parse hd [opt "horská" "práva"] ; == false
PARSE while
Podobně jako any, aplikuje pravidlo následného vnořeného bloku nikdy nebo alespoň jednou, dokud neselže; nestará se o případnou změnu vstupu:
a: ["elk" "cat"]
print parse a [ any ["fox" "dog"] "elk" "cat" ]
true
print parse a [ while ["fox" "dog"] "elk" "cat" ]
true
Ve skutečnosti je to mnohem složitější - viz Ungaretti # while.