summaryrefslogtreecommitdiff
path: root/machine-repl.lua
blob: 61930956102acc60fbefd8d3efcf66d21cbf5e3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env -Slua -i
local cip = require "automaton"
local x = "abcdefghijklm opqrstuvxyz"
local state = cip(x)
local history = {}
local format = require "format"


local function log (value)
	table.insert(history, {previous=state, value=value})
end


function back ()
	local entry = table.remove(history)
	if not entry then
		io.stderr:write("already at the earliest revision\n")
		return
	end
	state = entry.previous
	return state
end


function init (data)
	if data then
		x = data
	end
	state = cip(x)
	history = {}
	return state
end


function show ()
	print(state)
end


function c ()
	log(0)
	state = state:pivot()
	return state
end


function up ()
	log(1)
	state = state:up()
	return state
end


function down ()
	log(3)
	state = state:down()
	return state
end


function left ()
	log(4)
	state = state:left()
	return state
end


function right ()
	log(2)
	state = state:right()
	return state
end


function flush ()
	local values = {}
	for _, v in ipairs(history) do
		table.insert(values, v)
	end
	io.write("{", format.csv(values), "}\n")
	history = {}
end