SE情報技術研究会’s blog

http://se-info-tech.connpass.com

2015-10-31 第7回 関数型プログラミング勉強会の簡単なまとめ Part.2

ツリー

ようやくリストの話が終わり今度はツリーの話に。

代数的データ型の定義がわからないということでいろいろ説明してもらったが、論理和(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をまとめた内容で特に中身的には問題無し。

ただし、答えのコメントにあるキャストは必要なのか?については次回の宿題になった。