Scheme Compiler の勉強(28) - pair?, cons, car, cdr

ようやく pair?, cons, car, cdr のセットを実装。

gosh> (run-program '(pair? (cons 1 2)))
"#t\n"

gosh> (run-program '(car (cons 1 2)))
"1\n"

gosh> (run-program '(cons 1 2))
"<pair: 0x02800401>\n"

gosh> (run-program '(letrec ((list (lambda (x y)
				     (cons x (cons y ()))))
			     (sum (lambda (lst cnt)
				    (if (null? lst)
					cnt
					(sum (cdr lst) (fx+ (car lst) cnt))))))
		      (sum (list 3 4) 0)))
"7\n"
;;

TODO としてエラーチェックと型チェックとメモリ範囲のチェックその他その他。あと、今のところ runtime.c で適当に表示しているだけなので、cons の表示が適当。うーん、C でコンスセルの表示なんて書きたくないなぁ。どこで間違ってるのかわからなくなりそうなので。scheme で書くのだろうか。

つぎは closure か。勉強勉強。