『Scheme手習い』読書会 第7回

10月になりましたね。寒い日も増えてきました。僕は寒がりなので、家の中でももう厚着をしています。重装備です。

さて『Scheme手習い』読書会の7回目です。範囲としては5章途中(P91)〜5章最後(P97)でした。

今回の範囲では、関数andの紹介や、関数eqlist?・関数equal?の定義がありました。

5章全体では、lat*1やtup*2とは異なる、一般的な、S式のリストを扱えるようになった点が大きいです。再帰呼び出しが力を発揮する「リストを含むリストの走査」ができるようになりました。

  • 5章 *すごい*星がいっぱいだ(続き)
    • 関数andの紹介:ショートサーキット。偽が返された時点で残りのS式の評価を打ち切る。CやJavaなどと同じ。
    • 関数eqlist?の定義:*関数のようにリストに含まれるリストの内容についても一致を確認する。
    • (cond and 〜 or 〜 else 〜):両方が#fの場合を除いて処理するボイラープレートコード。事前にandで別処理をする場合に。下記例1を参照。
    • 関数myequal?の定義:元々equal?が定義されているためmyをつけた。リストについても同じかどうか調べられる。
    • 関数equal?を使用した関数eqlist?の書き直し:互いに呼び出しあう形。今後も出てきそう。
    • 関数remberの機能強化:latとアトムを引数に取っていた関数remberを、S式のリストとS式を引数に取れるように改修した。

例1:2つのリストの両方が空リストの場合の判定

(cond 
 ((and (null? l1) (null? l2)) ...)
 ((or (null? l1) (null? l2)) ...)
 (else ...))
; 略

次回は6章 影法師からです。

追記:『Scheme手習い』読書会 第8回

*1:アトムのリスト

*2:数のリスト