Java で Lisp 書いてみました。
ちょっと動くようになったので公開してみます。

https://github.com/moremagic/MyLisp

実行するときはこんな感じです

        String[] code = {
            "(+ 1 2.012)",
            "(cons dog (cat tree))",
            "(quote (+ 1 2))",
            "(+ 1 2 3 4.10)",
            "(+ 1 2 3 4 (+ 1 2) (+ 1 1))",
            "(+ 1 2 3 4 (+ 1 2 (+ 1 1)))",
            "(number? 1)",
            "(define a (+ 100 20)) (+ a 200)",
            "(define sub1 (lambda (n) (+ n 1))) (sub1 200)",
            "(define sub1 (n) (+ n 1)) (sub1 200)",
            "(null? (quote ()))",
            "(null? (quote aaa))",
            "(null? 0)",
            "(and #f #t (null? ()))",
            "(or #t (+ a b))",
            "(not (+ 1 2))",
            "(pair? (quote (1 2 3)))",
            "(> 2.12 2.1)",
            "(- 10 0.0001)",
            "(define < (lambda (a m) (> m a)))",
            "(define factorial (lambda (n m) (if (< n 1) m (factorial (- n 1) (* n m)))))",
            "(factorial 2800 1)",
        };


        MyLisp lisp = new MyLisp();
        try {
            for (String s : code) {
                System.out.println(s);
                lisp.evals(s);
            }
        } catch (Exception err) {
            err.printStackTrace();
        }


末尾再帰最適化もちゃんとできてないし
対話環境もまだできてないです。

最近これのせいで寝不足気味でしたが
実行環境作るの面白いですね。

少しづつ足りないとこを作りこんでいこうと思いますが、どうなることやら。