作って分かるLisp

昨日の何かメモを整理して、
schime.hpp
Lispっぽく書くことを第一としたのに、逆に構文が異様なことになっているが気にしない。
d<T, U>はドット対。l<T1, T2>はd<T1, d<T2, empty> >を、l<T1, T2, T3, ..., Tn>はd<T1, d<T2, d<T3, ...d<Tn, empty> ...>を生成するためのマクロ的なもの。マクロからリストを得るにはl<...>::type。リストを評価するにはd<T, U>::eval::type。めんどいのでl<...>も::eval::typeで評価できる。


例。

// 名前空間は省略
typedef l<eq, short, l<car, l<cdr, l<cdr, integer_list>::eval::type>::eval::type>::eval::type>::eval::type result; // result は exist::schime::t

なお、これを書いていたことで、D.G.の

  • Lisp理解度が3上がった
  • かしこさが1上がった
  • 足のにおいが2上がった


えんいー