Haskell勉強会

関数型プログラミングの学習日記

Haskell入門 1.1.1 関数型プログラミング言語

Haskell入門 関数型プログラミング言語の基礎と実践」の読書メモ。

第1章 はじめてのHaskell 1.1.1 関数型プログラミング言語(p.3)

 

haskell.hatenablog.com

 

 

1.1.1 関数型プログラミング言語

「関数」(function)について、今一度よく考えてみると、関数型プログラミングの特徴と利点が分かってくる。

 

関数型プログラミングの定義

「数学的な関数」は、引数に対して値が決まる。

数学的な関数で計算を表現するのが、関数型プログラミング

 

参照透過性

関数に与えた引数が同じなら、必ず結果の値も同じになることを「参照透過性」という。

 

(参考)参照透過性 - Wikipedia https://w.wiki/4hfs

 

f(x) = x + 1

という関数があった場合、引数xに1を与えたら、結果の値f(1)は必ず2になる。

100回計算しても、100回中100回ともf(1)の値は2になる。

f(1)が2になることが保証されており、2以外の値にはならないことを「参照透過性」がある、という言い方をする。

これがもし計算するたびに結果が違って、あるときはf(1)が10になったり、また別のあるときはf(1)が100になったりしたら、関数fには参照透過性がない、ということになる。

 

「数学的な関数」とは、参照透過性がある関数のこと。

 

式(expression)

式とは、数学的な関数を組み合わせて作ったもの。

関数型プログラミングでは、この数学的な関数を組み合わせて作った「式」を中心にして、計算(処理)の内容を記述していく。

 

式と文の違い

プログラミングには、「式」(expression)と「文」(statement)という用語・考え方で出てくる。

式と文の違いは、「2.1.1 手続き型言語関数型言語」で学ぶ。

両者の違いを一言で言えば、型の有無。

 

  • 式は型を持つ。
  • 文には型がない。

 

評価(evaluation)

関数に引数を与えて、関数の値を得ることを「評価」という言い方をする。

f(x) = x + 1

という関数があった場合、引数xに1を与えて、f(1)を評価すると、x+1は1+1になるので2という値が得られる。

 

手続き型の言語では、

「関数を実行する」

「関数を呼び出す」

という言い方をする。

 

関数型の言語では、

「式を評価する」

という言い方をする。

 

まとめ

関数型プログラミングの特徴は、「数学的な関数」を組み合わせて式を作り、「式を評価」して結果を得るスタイル。

手続き型でできることは、関数型でもできる。

 

(参考)構造化プログラミング - Wikipedia https://w.wiki/3eS6

 

手続き型プログラミング言語 関数型プログラミング言語
順次(sequence) 合成
選択(selection) パターンマッチ
反復(repetition) 再帰