Codebox Software

Simple Scheme Interpreter

Published:

This is an interpreter for a sub-set of the Scheme programming language. It was written as a learning exercise, and should not be used for anything important. The interpreter is open-source software, the source code is available on GitHub.

To use the interpreter, write your Scheme code into a text file and run scheme.py, passing the file name and location as a command-line argument, for example:

python scheme.py mycode.txt

The interpreter supports basic arithmetic and equality operators, conditional statements, the cons/car/cdr list operations, define and lambda.

Each statement in the source file will be evaluated in turn, and any printable results will be displayed to standard output. A few working Scheme programs and their resulting output are shown below:

(define factorial (
    lambda (n) (
        if (= n 1) 
            1 
            (* n (factorial (- n 1)))
        )
    )
)
(factorial 6)
720.0

 

(define fib (
    lambda (n) (
        if (< n 3)
            1
            (+ (fib (- n 1)) (fib (- n 2)))
        )
    )
)
(fib 10)
55.0

 

(define ackermann (
        lambda (m n) (
            if (= m 0)
                (+ n 1)
                (if (= n 0)
                    (ackermann (- m 1) 1)
                    (ackermann (- m 1) (ackermann m (- n 1))))
        )
    )
)
(ackermann 3 3)
61.0