2015-10-31 第7回 関数型プログラミング勉強会の簡単なまとめ Part.2
Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)
- 作者: Paul Chiusano,Rúnar Bjarnason,株式会社クイープ
- 出版社/メーカー: インプレス
- 発売日: 2015/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
ツリー
ようやくリストの話が終わり今度はツリーの話に。
代数的データ型の定義がわからないということでいろいろ説明してもらったが、論理和(OR)と論理積(AND)が関係するものだそう。
Treeの場合LeafとBranchがありそのどちらかになる点で論理和、Branchはコンストラクタの引数が2つあり、その組み合わせ分のパターンがあるので積となるらしい。
Exercise 3.25
これはGitHubにある答えで特に問題なし。
Exercise 3.26
これもGitHubにある答えで特に問題無し。
答えのコメントにあるように3.25と比較してみた。
def size[A](t: Tree[A]): Int = t match { case Leaf(_) => 1 case Branch(l,r) => 1 + size(l) + size(r) }
def maximum(t: Tree[Int]): Int = t match { case Leaf(n) => n case Branch(l,r) => maximum(l) max maximum(r) }
Exercise 3.27〜3.38
これらもGitHubにある答えで特に問題無し。
Exercise 3.29
これはExercise 3.25〜3.28をまとめた内容で特に中身的には問題無し。
ただし、答えのコメントにあるキャストは必要なのか?については次回の宿題になった。