Mini Lisp Interpreter in 300 lines of Lisp
Mini Lisp in 300 lines of Lisp
This is a very minimal Lisp interpreter written in Lisp. I made it because I wanted to learn Lisp and I was also interested in a Lisp project setup with tools like Roswell and fiveam.
It’s nowhere near a full-fledged Lisp, nor does it intend to be, yet I found it to be a good exercise to make some Lisp in Lisp to get myself familiarized with a bit of Lisp.
nil
, integers, symbolsdefine
(not ANSI CL)if
+
, -
, /
, *
and =
(define fibonacci (lambda (n) (if (= n 0) nil (if (= n 1) 0 (if (= n 2) 1 (+ (fibonacci (- n 1)) (fibonacci (- n 2))))))))
(fibonacci 12)
; 89
unless
macro
(defmacro unless (cond body) `(if ,cond () ,body))
(macroexpand '(unless (= 3 4) 1))
; (if (= 3 4) NIL 1)
(unless (= 3 4) 1)
; 1
(define n 3)
`,(+ 2 n)
; 5
Clone the project under local-projects
directory of Quicklisp or Roswell, and run commands as below.
./roswell/lips.ros
(ql:quickload '(:lips) :silent t)
(lips:lips)
(lips:exit)
(ql:quickload :fiveam)
(load #p"lips.asd")
(load #p"lips-test.asd")
(asdf:test-system :lips)