実践Common Lisp 第12章 リスト:やつらがLISPと呼ぶ理由
2009/06/05
今日は、12章を読んだ。リスト処理なので、最初にコンスセルの話があった。だけど、考えてみれば、ここまでコンスセルの話がでてこないのは、ある意味すごい。Lispの特徴的な部分だから、「Lisp 一夜漬け」だと基本文法とリストについてだけだし。実践Common Lispでは、マクロの後だもんな。
破壊的の2種類の意味
副作用を目的とした破壊と、引数を戻り値の材料として使う(リサイクルする)ことによっる引数の破壊。(と理解した) 確かに今まで、PGが「副作用のある関数は使うのに税金がかかる」って言ってたから初学の段階では避けるようになってた。
だけど、今後は理解して副作用のある関数も使えるかもしれない。実践Common Lispにも書いてあったけど、基本副作用が無い関数を使って、副作用が無い関数を書くほうがいい。パフォーマンスチューニングの段階で必要な箇所を最適化するほうが正しいアプローチ。
n
nreverse のn は、non-consingのn.
リスト系関数
lastが引数を取ることを知らなかった。あとbutlastというlastの反対を返す関数は存在自体を知らなかった。(これも引数を取る)
ldiff tailp
理解不能だった。HyperSpecも読んで、repl相手にいろいろ試してみたけど、何をする関数なのか理解できないorz.
諦めてからldiffとtailpの引数の順番が逆だったのに気がついたけど、それでもやはりわかりませーん。consセルについての理解が足りないのかも。