web-dev-qa-db-ja.com

関数型プログラミングは数学と強く関連していますか?

関数型プログラミングの多くは数学的な概念で描かれているので、関数型プログラミングは数学と非常に関連していますか?命令的なバックグラウンドを持つプログラマーのために、関数型プログラミングを学習および理解するための強力な数学の基盤を持つことは必須ですか?

22
prasonscala

すべてプログラミングは数学に関連しています。実際、多くの大学はまだコンピュータサイエンスプログラムを数学科の管轄下に置いています。

関数型プログラミングの学習に関しては、それを学ぶために数学に強い基盤を持つ必要はありません。私は3つの異なる関数型言語(Haskell、Erlang、Clojure)を習得しましたが、自分の数学のスキルは非常に弱いです。実際、Haskellのコミュニティーは、数学に焦点を当てた方法で話すことに少し煩わしく感じるかもしれませんが、ErlangとClojureはどちらも非常に実用的な関数型プログラミング言語であり、チュートリアル情報が記述されているため、それほど難しくはありません。筋金入りの数学オタクではなく、プログラマにとって。そうは言っても、私の数学のハンディキャップにもかかわらず、私はdidHaskellを取り上げたので、不可能ではありません。

一般に宣言型プログラミング言語(関数型はサブセットです)を選択するときに私が見つけた本当の困難は、制御したいという衝動を捨てることです。コンピュータに何をすべきかを伝える。慣れるまでに少し時間がかかります。

はい。基本的に、関数型プログラムは次のような一連のステートメントです。

// 1_と2_は「仮引数」ですf(1_):= sin(1_)g(1_、2_):= 1_ + 2_など...

x = f()

y = g(x)

z = h(x、h2(y))

等...

以前に定義された値の関数として新しい値(注:変数ではない)を定義する方程式の形式でプログラムが実行することになっていることを書いています。また、関数を関係として定義します。それは数学の定理が書かれている方法に本当によく似ています。

8
quant_dev

関数型プログラミングを使用できる言語の例としてのIMO Mathematicaは、数学の強いバックグラウンドを必要としません。実際、基本的な数学の教育中に関数型プログラミングのようなものに出会ったことはないと思います。私はCスタイルでMathematicaプログラミングを始め、数年後に関数型プログラミングを発見しました。 MapApplyNestListなどの基本的な関数型プログラミング構造には、数学の背景がまったく必要ないと思います。

2

あんまり。関数型プログラミングは単なる方法論ですが、ラムダ計算などをベースにしています。

クロージャーは、関数型プログラミングの概念を手続き型言語に導入する(小さな)試みです。 for(int i =0 ; i < num; i++) doStuff(arr[i]);の代わりに、配列の要素が本質的に「それらに対して行われたこと」を行うことができるので、代わりにarr.each do |el| doStuff(el) end

1

短い答えは次のとおりです。はい。ある程度の形式化されたすべて(プログラミング言語など)は、さまざまな程度の数学において、数学と強く関連しています。

ただし、プログラミング言語を使用するために、たとえば言語の理論上の基礎など、数学に精通している必要はありません。あなたは、文脈自由言語が何であるか、そしてそのような言語がそれを使うためにどんな法律や財産を持っているかを知る必要はありません。同様に、ドイツ語やフランス語を話すために、ドイツ語やルーマニストである必要はありません。

「数学的」表記は、関数型言語の一般的なプロパティではありません。 ScalaそしてすべてのLISPベースの言語はHaskellと比較して非常に異なる構文を持っています。

1
Ingo