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

Scheme手習い』読書会の5回目です。今日の範囲は4章の途中(P66)〜4章最後(P81)でした。

間隔があいてしまいました。時間の調整をつけるのはなかなか難しいですね。うまく都合をつけて続けていきたいです。

この章では関数をたくさん書きました。たくさん書くうちに、Scheme手習いの書き方に慣れてきました。何も見ずに書いても、自然と手習いの回答と似た形になります。字下げの規則がよく分かっていないため、その点ではいつも違うのですが……。

今回からテキストエディタMeadowをインストールしました。設定もすこしだけ変更しました。設定の際は『Emacs (Meadow) + GaucheでScheme開発 - wagavulin's blog』を参考にしました。

エディタを変更したおかげで、括弧の対応の間違いはなくなりましたし、作成した関数の保存も容易になりました。いままでよく対話モードでがんばったと思います。Emacsは小指が痛くなるのが不安ですが、しばらく試用期間をおいてみます。

さて、実際に読み進めた内容は以下の通りです。

  • 第4章 数遊び(続き)
    • 関数o*の定義:乗算を加算と減算とゼロ判定と再帰呼び出しで書く。
    • 関数tup+の定義:2つのtupの各要素の値を合計したtupを返す。
    • 関数tup+の改良:2つのtupの長さが異なる場合にも動作するように改良する。
    • 関数o>の定義:大なりを、減算とゼロ判定と再帰呼び出しで書く。
    • 関数o<の定義:小なりを、減算とゼロ判定と再帰呼び出しで書く。
    • 関数o=の定義:等号を、減算とゼロ判定と再帰呼び出しで書く。
    • 関数o=の改良:大なり、小なりを使用して書く。
    • 関数o^の定義:階乗を書く。
    • 関数o/の定義:割り算を書く。
    • 関数mylengthの定義:latの長さを返す。
    • 関数pickの定義:latからn番目のアトムを返す。
    • 関数rempickの定義:latからn番目のアトムを取り除いたlatを返す。
    • number?の紹介:基本関数らしいです。数なら#tを返す。
    • 関数no-numsの定義:latから数を取り除いたlatを返す。
    • 関数all-numsの定義:latから数以外を取り除いたtupを返す。
    • 関数eqan?の定義:同じアトムまたは同じ数のとき#tを返す。
    • 関数occurの定義:lat内の指定されたアトムの個数を返す。
    • 関数one?の定義:1のとき#tを返す。
    • 関数rempickの改良:one?を使って書き直す。

関数を書くのは楽しいです。ただ、たくさん書いたのですこし疲れてしまいました。ゆっくり休みたいと思います。次回が楽しみです。

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