EnumerableでLISPできそうなきがする

ここ数回直積の件でIEnumeralbeをリスト的に扱ってみたけど、これでLISPできるんじゃね?とふと思った。ってことで純LISPの5関数。いつか書いてみよう。

car

exp.ElementAt(0);

cdr

exp.Skip(1);

cons

コンスセルを表現するのは難しそうだなぁ。IEnumerableまんまじゃやっぱダメか。普通のリストだったら

Enumerable.Repeat(kar, 1).Concat(kdr);

でいけそうだけど、(1 . 2)とかの末尾がnilじゃないリストはどうすんべ...。

atom

アトムかどうか判断する処理を自分で書かんとな。

IsAtom(exp);

eq

exp1 == exp2;