Última actividad 1751820751

capitalex's Avatar capitalex revisó este gist 1751820751. Ir a la revisión

1 file changed, 65 insertions

prelude.lua(archivo creado)

@@ -0,0 +1,65 @@
1 + local function push(self, value)
2 + self.n = self.n + 1
3 + table.insert(self, value)
4 + end
5 +
6 + local function pop(self)
7 + local value = self[self.n]
8 + self[self.n] = nil
9 + self.n = self.n - 1
10 + return value
11 + end
12 +
13 + local function peek(self)
14 + return self[self.n]
15 + end
16 +
17 + local function create_stack(object, name)
18 + object[name] = { n = 0 , push = push, pop = pop, peek = peek }
19 + end
20 +
21 + LOBBY = {}
22 + create_stack(LOBBY, "lobby")
23 + LOBBY["lobby"]:push(LOBBY)
24 +
25 + function PUSH(stack, value)
26 + if not LOBBY[stack] then create_stack(LOBBY, stack) end
27 + LOBBY[stack]:push(value)
28 + end
29 +
30 + function PEEK(stack)
31 + assert(LOBBY[stack], "Stack underflow")
32 + assert(LOBBY[stack].n > 0, "Stack underflow")
33 + return LOBBY[stack]:peek()
34 + end
35 +
36 + function POP(stack)
37 + assert(LOBBY[stack], "Stack underflow")
38 + assert(LOBBY[stack].n > 0, "Stack underflow")
39 + return LOBBY[stack]:pop()
40 + end
41 +
42 + function PUSHTO(object, stack, value)
43 + if not object[stack] then
44 + create_stack(object, stack)
45 + end
46 + object[stack]:push(value)
47 + end
48 +
49 + function POPFROM(object, stack)
50 + assert(object[stack], "Stack underflow in external object.")
51 + assert(object[stack].n > 0, "Stack underflow in external object.")
52 + return object[stack]:pop()
53 + end
54 +
55 + function _become()
56 + LOBBY = POP('')
57 + end
58 +
59 + function _me()
60 + PUSH('', LOBBY)
61 + end
62 +
63 + function _object()
64 + PUSH('', {})
65 + end
Siguiente Anterior