markdown
関数型プログラミングの入口
lecture/information/programming-languages/foundation/関数型プログラミングの入口-講義.n.md

関数型かんすうがたプログラミングの入口いりぐち

date2026-04-01description命令型と関数型の計算モデルの違いを整理し、状態・副作用・参照透過性という概念から関数型プログラミングの動機を説明する講義である。prerequisitesdata/lecture/information/programming/プログラミング基礎の入口-講義.n.mdtype講義statusactiverelateddata/lecture/information/programming-languages/foundation/関数型プログラミングと型理論ポータル-講義.n.md / data/lecture/information/programming-languages/foundation/束縛と自由変数の基本-講義.n.md / data/lecture/information/programming/プログラミング基礎の入口-講義.n.md
informationprogramming-languageslecture

導入どうにゅう

この講義こうぎ核心かくしんは、「関数型かんすうがたプログラミングとはスタイルのこのみではなく、計算けいさんしき簡約かんやくとして計算けいさんモデルである」というてんにある。状態じょうたいえを中心ちゅうしんえた命令型めいれいがたモデルと、しきあたいへの簡約かんやく中心ちゅうしんえた関数型かんすうがたモデルのちがいをることで、かた重要じゅうようになる理由りゆう下地したじができる。

中心ちゅうしん課題かだい

なぜ変数へんすうへの代入だいにゅう状態じょうたい更新こうしん)をなくすと、プログラムの性質せいしつべやすくなるのか。

用語ようご

  • 副作用ふくさようside effect: もどあたい以外いがい観察可能かんさつかのう変化へんか変数へんすうえ、I/O、例外れいがいなど)
  • 参照透過性さんしょうとうかせいreferential transparency: おなしきはどこにあらわれてもおなあたい評価ひょうかされる性質せいしつ
  • 第一級関数だいいちきゅうかんすうfirst-class function: 関数かんすうあたいとして変数へんすう束縛そくばくしたり、べつ関数かんすうわたしたりできる性質せいしつ

方針ほうしん

まず命令型めいれいがた計算けいさんモデルを「状態じょうたいれつ」としてる。つぎに関数型かんすうがた計算けいさんモデルを「しき簡約かんやく」としてる。参照透過性さんしょうとうかせいつとなにがうれしいかを確認かくにんし、かた計算けいさんの「かたち宣言せんげん」として機能きのうする下地したじつくる。

直感的ちょっかんてき説明せつめい

命令型めいれいがたプログラムでは、x = x + 1 というぎょうは「x というはこ中身なかみえる」命令めいれいである。数学すうがく等号とうごうとはちが意味いみっている。

関数型かんすうがたでは、変数へんすうは「あるあたいへの名前なまえ」であり、のちからえない。f(x) = x + 1 という定義ていぎ数学的すうがくてき関数かんすうおな意味いみつ。したがって f(3) は「3 + 1 を計算けいさんする」というだけで、副作用ふくさよう発生はっせいしない。

命令型めいれいがた: x := 0; x := x + 1; print x
関数型かんすうがた: let f x = x + 1 in f 0

命令型めいれいがたでは「手順てじゅんって状態じょうたいわる」のにたいし、関数型かんすうがたでは「しきあたいへと変形へんけいされる」。

厳密げんみつ説明せつめい

1. 状態じょうたい副作用ふくさよう

命令型めいれいがた計算けいさんは、状態じょうたい変数へんすうあたい対応たいおう)を引数ひきすうにとりあたらしい状態じょうたいかえ関数かんすうとしてモデルできる。副作用ふくさようはこの状態じょうたい変化へんかである。副作用ふくさようがあると、「おな関数かんすうおな引数ひきすうんでも結果けっかことなる」ことがきうる。

2. 参照透過性さんしょうとうかせい

参照透過性さんしょうとうかせいつとき、e というしきveあたい)でえてもプログラムの意味いみわらない(等式推論とうしきすいろんequational reasoning成立せいりつする)。これにより、プログラムの部品ぶひん独立どくりつして理解りかい検証けんしょうできる。

3. 第一級関数だいいちきゅうかんすう高階関数こうかいかんすう

関数かんすうあたいとしてあつかえると、「関数かんすう引数ひきすうにとる関数かんすう」(高階関数こうかいかんすうhigher-order function)が自然しぜんける。この発想はっそう極限きょくげんλ計算らむだけいさんであり、すべての計算けいさんを「変数へんすうへの束縛そくばく」と「関数適用かんすうてきよう」だけであらわす。

4. かた動機どうき

参照透過性さんしょうとうかせい第一級関数だいいちきゅうかんすうわせると、「このしき整数せいすう評価ひょうかされることは保証ほしょうされているか」といういが自然しぜんてくる。かたはこのいにこたえる仕組しくみとして導入どうにゅうされる。

最小さいしょう具体例ぐたいれい

れい 1: 参照透過性さんしょうとうかせいくず

// 命令型(副作用あり)
var counter = 0;
function inc() { counter += 1; return counter; }
inc() // => 1
inc() // => 2  同じ呼び出しで異なる値
// 関数型(副作用なし)
let inc n = n + 1
inc 0  (* => 1 *)
inc 0  (* => 1 *)

れい 2: 高階関数こうかいかんすう

let apply f x = f x
let double n = n * 2
apply double 3  (* => 6 *)

apply関数かんすう引数ひきすうにとっている。doubleあたいとしてわたされている。

べつ見方みかた

命令型めいれいがたプログラミングを「時間じかん空間くうかんなか状態じょうたい変化へんかする機械きかいのモデル」とすると、関数型かんすうがたプログラミングは「しき変形へんけい規則きそくあつまり」である。前者ぜんしゃはコンピュータの物理的ぶつりてき動作どうさちかく、後者こうしゃ数学すうがく証明しょうめい操作そうさちかい。

見分みわかた

  • おなしきを 2 かい評価ひょうかして結果けっかわりうるか」をかんがえると、副作用ふくさよう有無うむえる
  • 「この関数かんすうもどあたい入力にゅうりょくだけでまるか」が参照透過性さんしょうとうかせい確認かくにんいである
  • 関数かんすう変数へんすうれたり引数ひきすうわたしたりしているなら、それは第一級関数だいいちきゅうかんすう使用しようである

一言ひとことでいうと

関数型かんすうがたプログラミングとは、計算けいさんを「状態じょうたいえ」ではなく「しきあたいへの簡約かんやく」としてあつかうことで、プログラムの部品ぶひん数学的すうがくてき推論すいろんできるようにする計算けいさんモデルである。

関連かんれんリンク

data/lecture/information/programming-languages/foundation/関数型プログラミングと型理論ポータル-講義.n.md data/lecture/information/programming-languages/foundation/束縛と自由変数の基本-講義.n.md
raw .n.md をコピー
loc をコピー (filepath:line ~ line)
copy share link
path をコピー
copy share link
copy share link
タブを全て閉じる