lisp処理系ぽいの書いてみてる
なんかまあ割と書けるもんだなあと思った。
% ./istsp
> (+ 32 -40 10)
2
> (cons "hoge" "moge")
("hoge" . "moge")
> (not #f)
#t
> (null? ())
#t
>ただ、まあ
> (+ 32 22 (- 11 10))
-1211785530
> (cons "hoge" (cons "fuga" "moge"))
("hoge" #proc "fuga" "moge")全然出鱈目なんですけどね。S式とかそのままリストじゃんーとか思って適当に書いてて、そういやリストと式を見わける方法考えてなかったわぎゃー、とか思った。実装はMiniSchemeを参考にしてるんだかしてないんだか、classとか使ってるけどOOPとかへの無理解具合は何それおいしいの? レベルだしほげほげ。
switch使えて楽かなー思って
enum Type
{
T_NONE,
T_STRING,
T_INTEGER,
T_CONS,
T_PROC,
T_SYMBOL,
}
みたいなことやったけど、例えばT_SYNTAX | T_SYMBOLみたいな複数属性持ちを表わすの楽だから
const T_STRING = 1; /* 0000000000000001 */ const T_NUMBER = 2; /* 0000000000000010 */ const T_SYMBOL = 4; /* 0000000000000100 */ const T_SYNTAX = 8; /* 0000000000001000 */ const T_PROC = 16; /* 0000000000010000 */ const T_PAIR = 32; /* 0000000000100000 */ const T_CLOSURE = 64; /* 0000000001000000 */ const T_CONTINUATION = 128; /* 0000000010000000 */ const T_MACRO = 256; /* 0000000100000000 */ const T_PROMISE = 512; /* 0000001000000000 */
こーいうの用意した方がいいのかなあと思ったけどそれってたぶんOOPじゃねえな。つーか真面目にMiniScheme読んでみるか。長くないんだし。