Land of Lisp 4章メモ
4章メモ
真偽値
Common Lispでは空リストを偽、それ以外を真として扱う。
また、空のフォームが空リストに評価され、nilは値nilをもつ定数で、値nilは空リストに等しいため、'()
()
'nil
nil
はすべて空リストとなり偽。
条件分岐
if,when,unless, cond,caseがある。
ifは普通の条件分岐、whenは真、unlessは偽のときに式を実行する。 condは判定式を一つ目の要素に持つリストが1つの分岐にあたり、caseは各分岐でeqlで比較をするcondに等しい。
and/or
ショートサーキットされるのを利用して条件分岐に使う技法。 個人的にはそこで副作用起こしてほしくない。
真偽値以上のもの
真偽値が空リストか否かであるので、真を返す時に情報を持たすことができる。ただfind-ifの例にあるようにこれだと結果として空リストを返したのか、偽を返したのかわからなくなる事があり得るので要注意。
正直、真偽値が個別にあるSchemeの設計の方が好み。
比較関数
Lispには比較関数がいろいろある。 eqとequalはC#の==とEqualsみたいなノリ(オブジェクトとしての等価と値としての等価)。
あとはわりとどうでもいいっぽい。