Open9

関数プログラミングの雰囲気を感じるために

Nobuo YamashitaNobuo Yamashita

「関数プログラミングとは」とは

この問はなんのためにあるのだろ?
どのような答が欲しいのか?
何を理解したいのか?

Nobuo YamashitaNobuo Yamashita

Functional Programming の Functional とは

関数 vs 関数
二択であれば、個人的には後者がよい。
「関数型」は "function type"の訳語で使いたい。

Nobuo YamashitaNobuo Yamashita

Function とは

プログラミング言語Cで、もし、"function"という用語が「機能」と訳されていれば、「関数プログラミングにおいて関数は数学の関数で、云々」なんてこといわずに済んだのか?
あれっ?プログラミング言語におい "function" の用語が使われたのはいつから?
Algolから?

Wikipediaによると

In mathematics, a function from a set X to a set Y assigns to each element of X exactly one element of Y. The set X is called the domain of the function and the set Y is called the codomain of the function.

Nobuo YamashitaNobuo Yamashita

Function call より Function application

「関数呼出し」といわず「関数適用」というほうが雰囲気を感じやすい。

Nobuo YamashitaNobuo Yamashita

Declarative

「宣言的」より、「叙述的」のほうが雰囲気を感じやすそうではある。

Nobuo YamashitaNobuo Yamashita

副作用

「副作用」は(命令)との混在する言語において有効な概念であって、

  • のみ:機械語、アセンブリ言語などの文脈
  • のみ:Haskellなどの文脈

では、使えない、あるいは、無効な概念。

Nobuo YamashitaNobuo Yamashita

高階関数

\sigma\tauとが型なら、\sigma \rightarrow \tau は型である。このような型のことを関数型(function type)という。

関数fの型が、\sigma \rightarrow \tauであるとき、\sigmaは関数f(domain)の型であり、\tauは関数f余域(codomain)の型である。

域の型または余域の型が関数型であるような関数を高階関数(higher-order function)という。