Jotter <2026-05-11 Mon>

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))))

Author: Breanndán Ó Nualláin <o@uva.nl>

Date: 2026-05-12 Tue 17:43