BLOG

シンラボメンバーのあれこれ

  1. HOME
  2. ブログ
  3. 代表通信
  4. 代表技術通信~Get Programming with Haskell⑪

代表技術通信~Get Programming with Haskell⑪

こんばんは。代表の草場です。

Haskell触ります。「Get Programming with Haskell」についてです。レッスン9です。

レッスン9. 高次関数

レッスン9を読んだ後は

高次関数を理解する
明示的に再帰的な関数の記述を避けるために map, filter, foldl を使用します。
多くの高次関数を自分で実装する

が理解できます。

今までさまざまな再帰関数を見ました。練習すれば再帰的なコードを書くことは容易になりますが、多くの関数は全く同じパターンの再帰を共有しています。

したがって、この再帰を、再帰について明示的に考える必要のない、一般的に使用される少数の関数に抽象化することができます。再帰的なコードを書くという課題に対する実際的な答えは、高次関数と呼ばれる関数群の一部である既存の関数を使用することです。

高次関数とは、別の関数を引数に取る関数のことです。一般的に、高次関数のほとんどすべては、再帰の一般的なパターンを抽象化するために使用されます。
再帰関数を書くのをはるかに簡単にする高次関数を見ていきます。

次のことを考えてみてください。リストの各メンバにそれぞれ3を加え、リストの各メンバに3を乗算するadd3ToAllとmul3byAllの2つの関数を紹介します。

add3ToAll [] = []
add3ToAll (x:xs) = (3 + x):add3ToAll xs
mul3ByAll [] = []
mul3ByAll (x:xs) = (3 * x):mul3ByAll xs

どちらの関数も書きやすく理解しやすく,ほぼ同じ構造を共有しています.

 

今日はここまで。

関連記事