関数型プログラミングの多くは数学的な概念で描かれているので、関数型プログラミングは数学にとても関連していますか?命令的な背景を持つプログラマーのための関数型プログラミングを学び、理解するための強力な数学の基礎を持つ必要がありますか?
関数型プログラミングの多くは数学的な概念で描かれているので、関数型プログラミングは数学にとても関連していますか?命令的な背景を持つプログラマーのための関数型プログラミングを学び、理解するための強力な数学の基礎を持つ必要がありますか?
回答:
すべてプログラミングは数学に関連しています。実際、多くの大学はまだコンピュータサイエンスプログラムを数学部の管理下に置いています。
関数型プログラミングの学習に関しては、数学を学習するための強力な基礎を持つ必要はありません。私は今、3つの異なる関数型言語(Haskell、Erlang、Clojure)を適度に習得しており、自分の数学スキルは非常に弱いです。Haskellのコミュニティは、実際、数学に焦点を当てた物事の話し方で少し面倒に感じることがありますが、ErlangとClojureはどちらも非常に実用的な関数型プログラミング言語であり、チュートリアル情報が書かれているので、ピックアップするのはそれほど難しくありません、プログラマ向けであり、ハードコアな数学オタク向けではありません。そうは言っても、数学のハンディキャップにもかかわらず私はは Haskellを取り上げたので、不可能ではありません。
宣言型プログラミング言語全般(関数型はサブセットです)を拾い上げる際に見つけた本当の難しさは、制御したいという衝動をあきらめています。コンピューターに何をすべきかを伝えるために。慣れるまでに時間がかかります。
はい。基本的に、機能プログラムは次のようなステートメントの集まりです。
// 1_と2_は「ダミー引数」f(1_):= sin(1_)g(1_、2_):= 1_ + 2_など...
x = f()
y = g(x)
z = h(x、h2(y))
等...
プログラムが行うべきことを、以前に定義された値の関数として新しい値(変数ではなく)を定義する方程式の形で書いています。また、関数をリレーションとして定義します。これは数学の定理が書かれている方法と非常によく似ています。
IMO Mathematicaは、関数型プログラミングを使用できる言語の例として、数学の強力なバックグラウンドを必要としません。実際、基本的な数学教育中に関数型プログラミングのようなものに遭遇したとは思いません。私はMathematicaプログラミングをCスタイルで始め、わずか数年後に関数型プログラミングを発見しました。私は基本的な関数型プログラミングコンストラクトは好きではないと思うMap
、Apply
、NestList
、などすべての任意の数学の背景が必要です。
あんまり。関数型プログラミングは単なる方法論ですが、ラムダ計算やそのようなものに基づいていました。
クロージャーは、関数型プログラミングの概念を手続き型言語に導入する(小さな)試みです。代わりにfor(int i =0 ; i < num; i++) doStuff(arr[i]);
、代わりに配列の要素が本質的に「それらに行われたもの」を持つことができると仮定することができますarr.each do |el| doStuff(el) end
The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.
簡単な答えは、そうです。なぜなら、ある程度の形式化(プログラミング言語など)を持つものはすべて、数学の度合いに応じて数学に強く関係しているからです。
ただし、プログラミング言語を使用する場合、言語の理論的基礎など、数学に厳密に精通している必要はありません。文脈自由言語とは何か、そしてそのような言語がそれを使用するためにどんな法律と財産を持っているかを知る必要はありません。同様に、ドイツ語やフランス語を話すためにドイツ人やローマ人である必要はありません。
「数学的な」表記法は、関数型言語の一般的な特性ではありません。ScalaとすべてのLispベースの言語は、Haskellと比較して非常に異なる構文を持っています。