2011年7月4日

実践Common Lisp再読中

快楽主義でいくとすると実践Common Lisp読むのが一番自然かなと思って再読中。
他にも未読の本が多数あるのだけどこの本を読み返すのが一番かなと思って読んでます。
改めて読み返してみるとさすがCommon Lispの本だけあって序盤でマクロです。
一回目読んだときは意味も分からずただ読み進めただけだったからさ。

しかしマクロ全然わからない。
自分でマクロ作るなんて全然うまくいかないのだけど、とりあえず標準で用意されているマクロを自分なりに実装してみることにしました。
「cond」なんかどうやってやってるか全然わからない。
大体「and」の時点でお手上げ状態。
とりあえずできたような気がするのが「when」「unless」だからね。
難しいね。

9章まで読み返したのだけどやっぱり肝はマクロだな。
マクロは魅力的過ぎる。
四苦八苦してやっと理解できたこととしては、マクロは評価されるタイミングが違うから、引数のS式が評価されないって点に気づくまでえらい時間がかかってしまいました。
だからマクロの呼び出しは「'」しないのだと。
何回読んでも「definition for mac, read only」意味不明だったけどマクロ呼び出しの時は引数のS式が評価されないってわかってからは、この小話の意味がちょっとだけ分かったような気がする。

しかし、「'」や「`」や「,」や「,@」ってスゴイこと考え付いたよね。
でもこれらを自由に使いこなせるようになったらマクロ無い言語は不自由に感じるんだろうな。

2011年7月3日

初めての人のためのLISP

竹内 郁雄著

他の言語やったことあるプログラム経験者に対してLISPの紹介、LISPをやったことあるけど意味わかんないやって人のためとか。
対象はそんな感じの人達ではないかなと思う。
たとえば'(quote)とか、condの書式とかなんでこんな風になってるのかとか。
自分はrplacaとかrplacdとか勉強になったかなと。
あと、setfの由来と言うかなんなのかとか。
マクロに関しては相変わらずさっぱりわからない状態です。
バッククオートとカンマ、カンマアット相変わらず不明。
自分でマクロ書けない、まだ自力でマクロ書けない。
副作用のある引数が複数回評価されることについては問題点は理解できているのだけど空で書けるか、防ぐことができるかと問われると自信がないですね。

やっぱりLispでプログラム書かないといけないよな。
マクロとか本で読んでソースを眺めているばかりではいつまでたっても自力で空でかけるようにならないのだろうな。


最後にこの本はCommon Lisp寄りでSchemeっぽくないです。
funcall、applyが登場しますので。