Lua Extras

This repository contains some sample Lua programs and extra code and tools for Lua.

All files are distributed under this license.

Code and tools

noparser.c
Lua core without the parsing modules
5.5 · 5.4 · 5.3 · 5.2
one.tar.gz
Lua core, libraries, and interpreter in a single file
5.5 · 5.4 · 5.3 · 5.2
strict.lua
checks uses of undeclared global variables
5.4 · 5.3 · 5.2 · 5.1

Sample Lua programs

Here are some sample Lua programs. You can try them online.

hello.lua
The first program in every language
-- the first program in every language
io.write("Hello world, from ",_VERSION,"!\n")
account.lua
A simple example of OOP in Lua
-- from PiL 1, Chapter 16
Account = {balance = 0}
function Account:new (o, name)
 o = o or {name=name}
 setmetatable(o, self)
 self.__index = self
 return o
end
function Account:deposit (v)
 self.balance = self.balance + v
end
function Account:withdraw (v)
 if v> self.balance then error("insufficient funds on account "..self.name) end
 self.balance = self.balance - v
end
function Account:show (title)
 print(title or "", self.name, self.balance)
end
a = Account:new(nil,"demo")
a:show("after creation")
a:deposit(1000.00)
a:show("after deposit")
a:withdraw(100.00)
a:show("after withdraw")
-- this would raise an error
--[[
b = Account:new(nil,"DEMO")
b:withdraw(100.00)
--]]
bisect.lua
Solving non-linear equations with the bisection method
-- bisection method for solving non-linear equations
delta=1e-6	-- tolerance
function bisect(f,a,b,fa,fb)
 local c=(a+b)/2
 io.write(n," c=",c," a=",a," b=",b,"\n")
 if c==a or c==b or math.abs(a-b)<delta then return c,b-a end
 n=n+1
 local fc=f(c)
 if fa*fc<0 then return bisect(f,a,c,fa,fc) else return bisect(f,c,b,fc,fb) end
end
-- find root of f in the inverval [a,b]. needs f(a)*f(b)<0
function solve(f,a,b)
 n=0
 local z,e=bisect(f,a,b,f(a),f(b))
 io.write(string.format("after %d steps, root is %.17g with error %.1e, f=%.1e\n",n,z,e,f(z)))
end
-- our function
function f(x)
 return x*x*x-x-1
end
-- find zero in [1,2]
solve(f,1,2)
globals.lua
Show all global variables
-- show all global variables
local seen={}
function dump(t,i)
	seen[t]=true
	local s={}
	local n=0
	for k in pairs(t) do
		n=n+1 s[n]=k
	end
	table.sort(s)
	for k,v in ipairs(s) do
		print(i,v)
		v=t[v]
		if type(v)=="table" and not seen[v] then
			dump(v,i.."\t")
		end
	end
end
dump(_G,"")
sieve.lua
The sieve of Eratosthenes with coroutines
-- the sieve of Eratosthenes programmed with coroutines
-- typical usage: lua -e N=500 sieve.lua | column
-- generate all the numbers from 2 to n
function gen (n)
 return coroutine.wrap(function ()
 for i=2,n do coroutine.yield(i) end
 end)
end
-- filter the numbers generated by `g', removing multiples of `p'
function filter (p, g)
 return coroutine.wrap(function ()
 for n in g do
 if n%p ~= 0 then coroutine.yield(n) end
 end
 end)
end
N=N or 500		-- from command line
x = gen(N)		-- generate primes up to N
while 1 do
 local n = x()		-- pick a number until done
 if n == nil then break end
 print(n)		-- must be a prime number
 x = filter(n, x)	-- now remove its multiples
end

Last update: Fri Dec 26 11:31:49 UTC 2025

AltStyle によって変換されたページ (->オリジナル) /