REBOL Programming/collect-words

From Wikibooks, open books for an open world
< REBOL Programming
Jump to: navigation, search

USAGE:[edit]

COLLECT-WORDS block /deep /set /ignore words 

DESCRIPTION:[edit]

Collect unique words used in a block (used for context construction).

COLLECT-WORDS is a function value.

ARGUMENTS[edit]

  • block -- (Type: block)

REFINEMENTS[edit]

  • /deep -- Include nested blocks
  • /set -- Only include set-words
  • /ignore -- Ignore prior words
    • words -- Words to ignore (Type: object port block)

SOURCE CODE[edit]

collect-words: func [
    {Collect unique words used in a block (used for context construction).} 
    block [block!] 
    /deep "Include nested blocks" 
    /set "Only include set-words" 
    /ignore "Ignore prior words" 
    words [object! port! block!] "Words to ignore" 
    /local rule word blk w
][
    deep: either deep [[path! | set-path! | lit-path! | into rule]] [any-block!] 
    word: either set [set-word!] [any-word!] 
    blk: [] 
    parse block rule: [
        set w word (insert tail blk to-word to-string w) | deep | skip
    ] 
    also either ignore [
        unless block? words [words: words-of words] 
        difference blk intersect blk words
    ] [
        unique blk
    ] (clear blk set [block words] none)
]