Extrakce

Klíčová slova:  set, copy,  keep, collect, collect set, collect into.


Připomínka: Příkaz "print" provádí úpravu výstupu. Sběrný blok ["fox" "rat"] například, upraví na fox rat.


PARSE set PARSE copy

V obou případech přiřadí ke jménu  následnou  první hodnotu uspokojené regule:


       parse [7 9 3] [set val integer! string! integer!]         ; --> false

print val                                                 ; --> 7

                                               

parse [7 9 3] [copy val integer! integer! integer!]       ; --> true                        print val                                                 ; --> 7    


parse [7 9 3] [integer! set val string! integer!]         ; --> false

print val                                                 ; --> val has no value!


Ve spojení s klíčovým slovem any se výstupy liší. Příkaz set vrací pouze první platnou hodnotu, příkaz copy vrací všechny zbyvající platné hodnoty:


       parse [7 9 3] [integer! set val any integer!]             ; --> true

print val                                                 ; --> 9

                                               

parse [7 9 3] [integer! copy val any integer!]            ; --> true                       print val                                                 ; --> 9 3    



PARSE keep  rule

Používá se s klíčovým slovem collect, collect set a collect into. Připojí do sběrného bloku kopii první následné hodnoty uspokojené regule.



PARSE collect

Vytvoří sběrný blok, zaplněný příkazem  keep. Příkaz  parse zde nevrací true či false.


a:  ["fox" "dog" "owl" "rat" "elk" "cat"]                ; vstupní blok


print parse a [

       collect[

       keep "fox"          ; success, patří do sběrného bloku

       "dog" "owl"     ; success, ale nepatří do sběrného bloku

       keep "rat"      ; success, patří do sběrného bloku

       keep "cow"          ; fail, proto nepatří do sběrného bloku

       "cat"  ] ]         ; success, ale nepatří do sběrného bloku

                 

fox rat


PARSE collect set

Na rozdíl od collect vrací true či false. Vytvořený sběrný blok přiřadí zadané proměnné (zde b).


Red[]


a:  ["fox" "dog" "owl" "rat" "elk" "cat"]                ; input block


print parse a [                 ; bez "print" nevrátí "false"

       collect set b [                 ; vytvoří sběrný blok b

       keep "fox" "dog" "owl"            ; "fox" is OK, will be kept

       keep "rat"                  ; "rat" is OK, will be kept

       keep "cow" "cat" ]          ; "cow" will be not kept

]


print b


false

fox rat


PARSE collect into

Na rozdíl od collect vrací true či false. Vytvořený sběrný blok přiřadí předem připravené proměnné (zde b).


Red[]


a: ["fox" "dog" "owl" "rat" "elk" "cat"]        

b: ""                                ; must create block first


print parse a [

       collect into b [

       keep "fox"             ; success, WILL be kept

       "dog"

       "owl"

       keep "rat"         ; success, WILL be kept

       keep "cow"             ; FAIL! will NOT be kept

       "cat"

               ]

]


print b


false

foxrat




Selektivní výběr syntaxí set-word

Při parsování lze ke zbytku vstupu přiřadit proměnnou, byť je výsledek negativní:


Red[]


a:  ["fox" "dog" "owl" "rat" "elk" "cat"]


print parse a [ "fox" "dog"  b:  ]   ; přiřadí zbytek slovu b

probe b


false

["owl" "rat" "elk" "cat"]