lisp処理系ぽいの書いてみたり

間違ってもScheme処理系ではありません。適当に書いてるので、たぶん色々適当です。わりと面白い。

% ./istsp
> (* 10 (/ 9 3) (+ 1 2))
90
> (null? nil)
#t
> (not #f)
#t
> (eof? (read))
322
#f
> (eof? (read))
^D#t
> (cons "hoge" "moge")
("hoge" . "moge")
> (cons "hoge" nil)
("hoge")
> (list 1 2 3)
(1 2 3)
> (append (list 1 2 3) (list 4 5 6))
(1 2 3 4 5 6)
> (print (read))
(+ 3 2 4) 
(#proc 3 2 4)
#undef
> (define "a" (+ 100 200 (* 10 3)))
330
> a
330
> ^DGood-bye

そういえばistspってのはたしか「3分でできるインスタントLisp風味処理系」の略です。3分ではできませんでした。

defineに渡してるものがおかしいですね。びっくりなことにlambdaもありません。そんなもんLispじゃねえ! S式読めるようになったわーい、とかそんなレベルです。ちゃんとした言語の処理系を作ってる人はえらいなあと思いました。あと俺はもっとちゃんとしたプログラムを読んだ方が良いなと思った。

以下ソース。700行くらいだけど、だいじょぶだよねはてなさん。
700行あるコード貼るとうざかったので削除。ソースこっち http://konbu.s13.xrea.com/lib/scm/istsp.d

Machineとか書いてんのは、少しMiniSchemeをイメージした。イメージだけ。codeとか使ってないし。argsとかスタックなんだけど、何故かshift/unshiftでやってたり。あちこちでnewしてるのはなんか嫌だなあとか。まあ冒頭で書いたとおり、適当に書き散らしてるところです。

test