Skip to content
Lisp REPL (Read, Eval, Print Loop)
HTML JavaScript Common Lisp CSS
Branch: gh-pages
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
.gitmodules
README.md
index.html
lisp-repl.css
lisp-repl.js
test.lisp
tests.html

README.md

Lisp Read, Eval, Print, Loop

https://xin-xin.me/code/lisp-repl/

This is a Lisp interpreter written in JavaScript. The version of Lisp implemented here is my own variation of Paul Graham's Arc Lisp.

Example Commands

(+ 2 2)
=> 4

(map [+ _ 1] '(1 2 3))
=> (2 3 4)

(def fact (n)
      (if (is n 0) 1
          (* n (fact (- n 1)))))
    (fact 5))
=> 120

('(a b c d e) 2)
=> c

("abcde" 2)
=> "c"

(prn "Hi, how are you?\nI'm good, thank you!")
Hi, how are you?
I'm good, thank you!
=> nil

(case 1
  1 'a
  2 'b
  3 'c
  4 'd
  5 'e
  6 'f
  'else)
=> a
(case 5  1 'a  2 'b  3 'c  4 'd  5 'e  6 'f  'else)
=> e
(case 9  1 'a  2 'b  3 'c  4 'd  5 'e  6 'f  'else)
=> else

(for i 1 10 (pr i " "))
12345678910
=> nil

(rep 5 (prn 3))
3
3
3
3
3
=> nil

(tostr (prn "domesday") (prn "book"))
=> "domesday\nbook\n"

(= x '(c a b))
=> (c a b)
(pop x)
=> c
(push 'f x)
=> (f a b)
x
=> (f a b)

(= x '(1 2 3))
=> (1 2 3)
(++ (car x))
=> 2
x
=> (2 2 3)
You can’t perform that action at this time.