RosettaCodeData/Task/Letter-frequency/Lua/letter-frequency.lua

37 lines
690 B
Lua
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
-- Return entire contents of named file
function readFile (filename)
local file = assert(io.open(filename, "r"))
local contents = file:read("*all")
file:close()
return contents
2013-04-10 21:29:02 -07:00
end
2017-09-23 10:01:46 +02:00
-- Return a closure to keep track of letter counts
function tally ()
local t = {}
-- Add x to tally if supplied, return tally list otherwise
local function count (x)
if x then
if t[x] then
t[x] = t[x] + 1
else
t[x] = 1
end
else
return t
end
end
return count
2013-04-10 21:29:02 -07:00
end
2017-09-23 10:01:46 +02:00
-- Main procedure
local letterCount = tally()
for letter in readFile(arg[1]):gmatch("%a") do
letterCount(letter)
end
for k, v in pairs(letterCount()) do
print(k, v)
2013-04-10 21:29:02 -07:00
end