Hi,
I am relatively new to Lua
language.
As per the book written by R.
Ierusalimschy, allwords() function generates words which contain only letters
and numbers. I'd like to modify the function so that words can be anything
printable between spaces. The mod is shown below, rather more complicated. Is
there a way to simplify the code?
The mod would be more handy for
Markov Chains Program which is shown in the later chapter.
Thanks.
Geo Massar
Independent
Developer
function allwords
() -- the factory
local line =
io.read() -- current line
local newline = true
local
pos
-- word position
return function () --
iterator function
while line
do -- repeat while there are
lines
local s, e,
word
if newline then
line = " "..line.."
"
s,e = string.find(line, "%s+",
1)
pos = e +
1 -- advance to the first
word
newline =
false
end
s,e = string.find(line, "%s+", pos)
if s
then
word = string.sub(line, pos,
s-1)
pos = e +
1 -- advance to the next
word
return
word
else
line = io.read() -- word
not found; try next line
newline =
true
end
end
return
nil -- no more
lines: end of traversal
end
end