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

Scheme手習い』読書会の10回目です。範囲としては7章途中(P119)〜7章最後(P125)です。

  • 7章 友達と親類(続き)
    • 関数a-pair?の定義:Scheme本来のpairとは異なる形のペア(例:(1 3))を判別し、ペアなら#tを返す。
    • 関数first, second, buildの定義:ペアを操作するための補助関数を定義。それぞれ、ペアから最初の要素を取り出す、2番目の要素を取り出す、アトム2個からペアを作成する関数。
    • 関数thirdの定義:話の流れとは関係ないけど、三番目の要素を取り出す関数。あと(car (cdr (cdr x)))はもう(caddr x)を使っています。R5RSに定義されていますし、必要なら自分で定義もできます。これ良いですね。
    • レル(rel):ペアのリスト、かつペアの集合の場合にrelと言う。例:( (1 3) (2 3) (3 4))。
    • ファン(fun):relのうち、(firsts rel)が集合の場合にfunと言う。
    • 関数fun?の定義:(set? (firsts rel))。
    • 関数revrelの定義:relを引数に取り、各ペアの1番目の要素と2番目の要素を入れ替えたもの。
    • 関数revpairの定義:ペアの1番目と2番目の要素を入れ替えたペアを返す。revrelの補助関数として使える。
    • 関数fullfunの定義:全単射(fullfun)かを調べる。(set? (seconds fun))。funかつ各ペアの2番目の要素に重複がない場合fullfun。
    • one-to-one:fullfunならone-to-one(一対一対応)らしい。

何の説明もなく出てきたnil(P117)や、レル・ファンの定義(P121)や、有限関数の説明(P122)や、一対一対応(P124)など、説明に納得のいかない、説明不十分な部分が増えています。nilにいたってはSchemeにはないので、どうにかしてほしいものです。

『Scheme手習い』非公式の正誤表を見つけました。nilはやはりミスのようです。

あと、今日から無変換をControlに置き換えています。いわゆる親指Ctrlです。これですこしはマシになるはず。

Meadowの基本操作はEmacsの主要操作(早見表)にある分は大体使えるようになりました。

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