Files
Nexus/main.lua
T
paladin 69c8b37854 Update main.lua
Rewritten for changes to standard.
2026-07-23 19:47:29 +00:00

111 lines
2.4 KiB
Lua

-- it's like dancing on ice
local function class(factory,stuff)
local meta = stuff
for index,item in pairs(stuff) do
meta["__"..index] = item
end
return setmetatable(meta,{
__call=function(this,...)
setmetatable(factory(...),meta)
end
})
end
local function iterate(thing)
local closure = pairs(thing)
return function(...)
local index,item in closure(...)
return item
end
end
local c = class(function()
return {i = {}}
end)
local n = class(function(c,v,a,b)
local new = {c = c, v = v, a = a, b = b, s = {}}
table.insert(a.s,new)
table.insert(c.instances,new)
return new
end)
local I = 1
local n = function(c,...)
N(c,I,...)
end
c.cookie = c()
c.before = c()
c.after = c()
c.out = c()
c.in = c()
c.so = c()
c[";"] = c()
for i in string.byte("a"),string.byte("z") do c[string.char(i)] = c() end
do
-- !a; !b; !next(a,b) <- !before(b,a) -- if b is after a then a is before b
local a = n();
local b = n();
N(c.so,N(c.next,a,b),N(c.before,b,a))
end
local function s(r)
local objects = {r}
local time = 0
while true do
for o in iterate(objects) do
for similar in iterate(o.c.i) do
for _depends in iterate(similar.s) do
if _depends.c == c.so then
for linked in iterate(_depends.b.s) do
local fail = false
for depends in iterate(linked.s) do
if depends.c == c.so and depends.b == linked then
for instanced in iterate(o.s) do
if depends.c == instanced.c then
end
end
end
end
if not fail then
end
end
end
end
end
for linked in iterate(o.s) do
table.insert(objects,linked)
end
time = time + 1
if time > 100 then return end
end
end
end
while true do
local input = io.read()
local command,rest = input:match("%a*.+")
local previous = N(c())
local function write(text,author)
for char in text:match(".") do
if author[char] then
local it = n(author[char])
N(c.in,it)
N(c.after,previous,it)
end
end
end
(({
["in"] = function()
write(rest,c.in)
end,
["out"] = function()
write(rest,c.out)
end,
["cookie"] = function()
write()
end,
})[command] or function() write(command..rest,c.in) end)()
end