Jotter
def fibonacci_sequence(n):
sequence = []
a, b = 0, 1
for _ in range(n):
sequence.append(a)
a, b = b, a + b
return sequence
Our Racket interpreter is split over a number of Lisp packages. This was because we wrote a numbre of iterpreters for various mini-languages.
For your Python interpreter we will use just one package: :tolk/python. This
package is already defined in src/python/package.lisp so when you begin writing
your Python interpreter you only need to make a file called
src/python/interpreter.lisp, you only need to put the following line at the top:
(in-package :tolk/python)
You might then continue with:
(defgeneric interpret (node))
(defmethod interpret ((c constant))
(slot-value c 'value))
(defmethod interpret ((b binop))
(funcall (case (slot-value b 'op)
(:add '+))
(interpret (slot-value b 'left))
(interpret (slot-value b 'right))))
The first one interprets constant values and the second binary operators (only addition!).
Or if you prefer to use defmethod-bind then:
(defmethod-bind interpret ((constant value) env)
()
value)
(defmethod-bind interpret ((binop left op right) env store)
((left-val (interpret left env store))
(right-val (interpret right env store1)))
(ecase op
(:add (+ left-val right-val))))