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読んでみるか。長くないんだし。