novaweb.nv
· 1.8 KiB · Text
Raw
Playground
Let's write a program that computers the fibonacci sequence. First we must define the base cases of the function. for the sake of simplicity, n <= 0 returns zero.
The base case for n <= 0:
if n <= 0 then
return 0
end
The base case for 1:
if n == 1 then
return 1
end
Now for a recursive case. For this implementation, we will stick with the original formula rather than optimizing it.
The recursive case for the fibonacci sequence:
return fib(n - 1) + fib(n - 2)
Finally, lets assemble this into a Lua function.
The fibonacci function:
local function fib(n)
@ The base case for n <= 0
@ The base case for 1
@ The recursive case for the fibonacci sequence
end
our program:
@ The fibonacci function
print(fib(10))
do:
compile
source:
@ our program
---
do:
%action
---
%action
---
dereference
from:
%reference
%reference:
%code
---
dereference
from:
%reference
spent:
%code
compiled code:
%code
---
dereference
from:
%reference
---
restore dereference
from:
%reference
---
restore dereference
from:
%reference
spent:
%code
---
restore dereference
from:
%reference
%reference:
%code
---
restore dereference
from:
%reference
---
compile
---
compile
source:
@ %reference
---
dereference
from:
%reference
needs another pass:
yes
---
compile
source:
%code
---
compile
compiled code:
%code
---
compile
needs another pass:
yes
---
next pass
---
compile
---
compilation finished
---
next pass
compiled code:
%code
---
next pass
source:
%code
---
next pass
---
compile
---
compilation finished
compiled code:
%code
---
compilation finished
out:
%code
---
compilation finished
---
print code
---
print code
out:
%tuple
---
print code
@print:
%tuple
1 | Let's write a program that computers the fibonacci sequence. First we must define the base cases of the function. for the sake of simplicity, n <= 0 returns zero. |
2 | |
3 | The base case for n <= 0: |
4 | if n <= 0 then |
5 | return 0 |
6 | end |
7 | |
8 | The base case for 1: |
9 | if n == 1 then |
10 | return 1 |
11 | end |
12 | |
13 | Now for a recursive case. For this implementation, we will stick with the original formula rather than optimizing it. |
14 | |
15 | The recursive case for the fibonacci sequence: |
16 | return fib(n - 1) + fib(n - 2) |
17 | |
18 | Finally, lets assemble this into a Lua function. |
19 | |
20 | The fibonacci function: |
21 | local function fib(n) |
22 | @ The base case for n <= 0 |
23 | @ The base case for 1 |
24 | @ The recursive case for the fibonacci sequence |
25 | end |
26 | |
27 | our program: |
28 | @ The fibonacci function |
29 | print(fib(10)) |
30 | |
31 | do: |
32 | compile |
33 | |
34 | source: |
35 | @ our program |
36 | |
37 | --- |
38 | do: |
39 | %action |
40 | --- |
41 | %action |
42 | |
43 | --- |
44 | dereference |
45 | from: |
46 | %reference |
47 | %reference: |
48 | %code |
49 | --- |
50 | dereference |
51 | from: |
52 | %reference |
53 | spent: |
54 | %code |
55 | compiled code: |
56 | %code |
57 | |
58 | --- |
59 | dereference |
60 | from: |
61 | %reference |
62 | --- |
63 | restore dereference |
64 | from: |
65 | %reference |
66 | |
67 | --- |
68 | restore dereference |
69 | from: |
70 | %reference |
71 | spent: |
72 | %code |
73 | --- |
74 | restore dereference |
75 | from: |
76 | %reference |
77 | %reference: |
78 | %code |
79 | |
80 | --- |
81 | restore dereference |
82 | from: |
83 | %reference |
84 | --- |
85 | compile |
86 | |
87 | |
88 | --- |
89 | compile |
90 | source: |
91 | @ %reference |
92 | --- |
93 | dereference |
94 | from: |
95 | %reference |
96 | needs another pass: |
97 | yes |
98 | |
99 | --- |
100 | compile |
101 | source: |
102 | %code |
103 | --- |
104 | compile |
105 | compiled code: |
106 | %code |
107 | |
108 | --- |
109 | compile |
110 | needs another pass: |
111 | yes |
112 | --- |
113 | next pass |
114 | |
115 | --- |
116 | compile |
117 | --- |
118 | compilation finished |
119 | |
120 | --- |
121 | next pass |
122 | compiled code: |
123 | %code |
124 | --- |
125 | next pass |
126 | source: |
127 | %code |
128 | |
129 | --- |
130 | next pass |
131 | --- |
132 | compile |
133 | |
134 | --- |
135 | compilation finished |
136 | compiled code: |
137 | %code |
138 | --- |
139 | compilation finished |
140 | out: |
141 | %code |
142 | |
143 | --- |
144 | compilation finished |
145 | --- |
146 | print code |
147 | |
148 | --- |
149 | print code |
150 | out: |
151 | %tuple |
152 | --- |
153 | print code |
154 | @print: |
155 | %tuple |
156 |