関数型プログラミングの準備で私の考え方を変える


9

手続き型およびOOPから来た関数型プログラミングに切り替える場合、「この新しい考え方」について事前に知っておくべきことは何ですか。

FPの世界でのダイビングに向けてどのように準備し、それを初めて体験するのですか?

最初に学び、最初に設定するための基本は何ですか?


2
これは一般的すぎます。読み始めてください!今日の関数型プログラミングに関するほとんどの本とマニュアルは、質問への回答から始まります。
devmiles.com 2012

それを試してみて、何かに行き詰まった場合は質問を投稿してください
Tom Squires

@Vladimir Volodin:それはいいことですが、すべての本に必須ではありません。あなたはいくつかの良いもの(できれば言語にとらわれない)を推薦できますか?
JohnDoDo

ダイビングする必要はありません。C#などのOOP言語でラムダ式を試して、OOPからFPへの移行をスムーズにすることができます。
TomCaps、2012

4
あなたはそれを逆に持っていると思います。関数型プログラミングを試すと、考え方が変わります。
ケビンクライン

回答:



6

問題を解決するための手続き的な「最初にこれを実行し、次にこれを実行し、次にこれを実行する」方法ではなく、宣言的思考が必要になります。再帰の理解は、手続き的思考と宣言的思考の間の一種のスイートスポットであるため、良い出発点になる可能性があります。


4

カートを馬の前に置きました。準備する必要はありません。面白そうな言語を選び、ドキュメントを見つけて、試してみてください。行き詰まった場合は、停止して回答を検索してください。進歩するにつれて、考え方が変わります。


3

FPは、ラムバ計算に基づいています。あなたはそれを知る必要があります。その良い出発点です。機能がすべてです。状態の概念はありません(ただし、より高いレベルで偽造することはできます)。

OOPでは、

a = 1 a = a + 1

受け入れられます。FPではそうではありません。変数に別の値を割り当てることはできません。FPを長期にわたって学びたい場合は、Haskellを学んでください。それは世の中で最も純粋なFPのバージョンであり、非常に複雑でもあります(私はそれを学習し始めたばかりです)が、それでも学ぶ価値があります。

関数型プログラミング入門では、FPの概要について概要を説明します。

ただし、2つの警告

  1. 就職のためにFPを学びたいのであれば、空席はそれほど多くありません。手続き型およびOOPは依然として雇用市場を支配しています。しかし、FPは、問題を解決する新しい方法を模索する上で多くの助けになります。
  2. FPコンパイラは非常に高速ではありません。FPは問題の解決により関心があるため、Cの速度は期待できません。ただし、コンパイラー(Haskell内)に命令を発行して、実行プロセスを高速化できます。トレードオフは、消防のバグではなく、手元のプログラムに集中することに多くの時間を費やすことです。

8
「FPはランバ計算に基づいています。あなたはそれを知る必要があります。」いいえ、必要ありません。関数型プログラミングを理解するには、命令型プログラミングを理解するためにチューリングマシン(またはアセンブリ)を知る必要がある以上に、ラムダ計算を知る必要はありません。
-sepp2k

@ sepp2k FPで長期的な目標を達成するには、ラムダ計算の学習が必要だと正直に思います。あなたはラムダ計算なしでそれを学ぶことができますが、それを学ぶことはFPであなたをより良くするでしょう。
Ubermensch

2
FPは正式にその状態を持っていますが、その状態は通常不変であり、コンパイラが遅いという記述に同意するかどうかもわかりません
jk。

@jk。確かに、それらには状態がありますが、OOの方法ではありません(状態は、関数に、または一致パターンとして、より微妙な方法で含めることができます)。そして不変の状態とは、あなたがたった一つの状態を持っていることを意味します。そのため、関数は常に同じ値を返す必要があります。コンパイラーについては、順序を指定する代わりにコンパイラーが結果の計算に必要なステップを処理するため、純粋な速度の点でC / C ++と一致することはできないと思います。FPの最大の利点は、純粋なCPU速度ではなく、開発者コストの削減と並列計算です。
Ubermensch 2012年

3

私は次のマントラを覚えるように最善を尽くします:

データ入力->データ変換->データ出力

または

TransformData(Data In)-> Data Out


1
TransformData(DataIn)-> DataOut
Ubermensch

:)マトラとして「データ入力、データ変換、データ出力」は「変換データ、大括弧、データ入力、大括弧、データ出力」と言う方が簡単なので、私はあなたに同意します。
Darknight

友好的なコメント相手です。ご回答ありがとうございます。
Ubermensch

私はあなたと冗談を言っていただけで、犯罪はありません。実際、私はマトラを更新するつもりです。
Darknight

あなたのスキルセットはかなり大きいです。
Ubermensch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.