15.6.2.2297 TRAVERSE-WORDLIST TOOLS EXT
Remove wid and xt from the stack. Execute xt once for every word in the wordlist wid, passing the name token nt of the word to xt, until the wordlist is exhausted or until xt returns false.
The invoked xt has the stack effect ( k * x nt -- l * x flag ).
If flag is true, TRAVERSE-WORDLIST will continue with the next name, otherwise it will return. TRAVERSE-WORDLIST does not put any items other than nt on the stack when calling xt, so that xt can access and modify the rest of the stack.
TRAVERSE-WORDLIST may visit words in any order, with one exception: words with the same name are called in the order newest-to-oldest (possibly with other words in between).
An ambiguous condition exists if words are added to or deleted from the wordlist wid during the execution of TRAVERSE-WORDLIST.
See:
15.6.2.1909.20 NAME>INTERPRET, 15.6.2.1909.10 NAME>COMPILE.
Rationale:
prints a count of the number of words in the FORTH-WORDLIST.
prints the name of a word containing the string "COM", if it exists, and then terminates.
ContributeContributions
GerryJackson [19] TRAVERSE-WORDLIST is in the wrong word setComment2016-05-22 20:03:53
Despite TRAVERSE-WORDLIST being regarded as a programming tool it cannot be used or tested unless wordlists can be created which requires at least some of the words in the Search-Order word set. Therefore it belongs in the Search-Order word set.
ruv [118] Unfindable definitionsComment2019-09-20 23:23:52
If a definition is available via TRAVERSE-WORDLIST
, can we say that it is findable in the dictionary?
Perhaps, for clarity, we should mention that unfindable definitions (e.g. not ended, or nameless, or quotations) shall not be available via TRAVERSE-WORDLIST
. Otherwise, among other issues, SEARCH-WORDLIST
cannot be correctly implemented via TRAVERSE-WORDLIST
factor.
ruv [312] TRAVERSE-WORDLIST must not expose the current definitionSuggested Testcase2023-10-23 10:04:08
TRAVERSE-WORDLIST
is not allowed to visit the current definition, unfinished or hidden definitions (see also the accepted proposal #153 Traverse-wordlist does not find unnamed/unfinished definitions).
Some systems place the current definition into the compilation word list and change its header in such a way that this definition cannot be found via FIND-NAME-IN
or SEARCH-WORDLIST
. By a mistake, nt
for this definition can be exposed by TRAVERSE-WORDLIST
.
This test ensured that the current definition is not exposed, and that the correct number of names is placed into the compilation word list.
: WORDLIST-LENGTH ( wid -- u )
>R 0 [: DROP 1+ TRUE ;] R> TRAVERSE-WORDLIST
;
: L ( -- u ) GET-CURRENT WORDLIST-LENGTH ;
T{ L :NONAME [ L ] LITERAL ; EXECUTE L = = -> TRUE }T
T{ L : TW1 [ L ] LITERAL ; TW1 OVER = SWAP 1+ L = AND -> TRUE }T
lmr [319] Nested invocation, ret stack Request for clarification2023-12-18 04:59:48
What assumptions can XT make about TWL and viceversa?
- can XT invoke another TWL recursively?
- can TWL save information on the return stack, e.g can I implement TWL using two nested DO loops (an inner one to iterate over wordlist indices, and a "dummy" outer one just to make wid available as J)?
lmr [326] shadowed namesRequest for clarification2023-12-26 18:09:55
[…] words with the same name are called in the order newest-to-oldest
Does this mean the system needs to keep around word definitions even after they are shadowed by a re-definition (thus precluding a simple hash-table implementation of wordlists)...?