A scheme-like interpreter written in Python. Inspired by this good article by Norvig: http://norvig.com/lispy.html
To execute file:
$ ./clasp.py tests.clasp
To run the REPL:
~/projects/clasp$ ./clasp.py repl
Welcome to Clasp REPL
> (load "tests.clasp")
File tests.clasp executed.
> (sum (range 0 10))
45
; Clasp is a weird scheme by Claudio. ; These are some basic functions and sanity checks. (def - (=> (a b) (+ a (* -1 b)))) (def assert (=> (test) (if (not test) (raise "assert failed")))) (def assert-equal (=> (a b) (assert (eq? a b)))) (def squared (=> (x) (* x x))) (def sum (=> l (reduce l +))) (def mul (=> l (reduce l *))) (def range (=> (start end) (if (eq? start end) (list) (cons start (range (+ start 1) end))))) (def for (=> (start end f) (let (i 0) (while (< i end) (begin (f i) (set! i (+ i 1))))))) (def fibonacci (=> n (if (or (eq? n 1) (eq? n 2)) 1 (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))) (assert-equal (- 10 4) 6) (assert-equal (+ 1.1 1) 2.1) (assert-equal (fibonacci 7) 13) (assert-equal (squared 10) 100) (assert-equal (len (range 0 10)) 10) (assert-equal (sum (range 0 10)) 45) (assert-equal (str "hello" " " "world") "hello world") (assert-equal (let (x 1 y 2) (+ x y)) 3) (assert-equal (let (i 0) (begin (set! i (+ i 1)) i)) ;;; Python eval (assert-equal (py "1+1") 2) (assert-equal (sum (py "[i for i in range(10)]")) (sum (range 0 10)))