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みたいなノリ(オブジェクトとしての等価と値としての等価)。

あとはわりとどうでもいいっぽい。

ところで

この章で何度も"対称性"という言葉がでるけどなにをさして"対称性"と言っているのだろうか。