タグ付けされた質問 「functional-programming」

関数型プログラミングは、プログラムの状態ではなく入力によって出力が決定される関数の連鎖評価によって計算問題を解決しようとするパラダイムです。このプログラミングスタイルでは、副作用と可変データは廃止され、通常は厳密に分離されます。

15
カレーの利点は何ですか?
私はカレーについて学んだばかりで、コンセプトを理解しているとは思いますが、それを使用することに大きな利点はありません。 些細な例として、2つの値を追加する関数を使用します(MLで記述)。カレーなしのバージョンは fun add(x, y) = x + y と呼ばれます add(3, 5) カレー版は fun add x y = x + y (* short for val add = fn x => fn y=> x + y *) と呼ばれます add 3 5 私は、関数の定義と呼び出しから括弧のセットを削除する構文糖衣のように思えます。カリー化は関数型言語の重要な機能の1つとして挙げられてきましたが、現時点ではそれに少々困惑しています。タプルをとる関数の代わりに、それぞれ単一のパラメーターを消費する関数のチェーンを作成するという概念は、単純な構文の変更に使用するのはかなり複雑に思えます。 わずかに単純な構文がカリー化の唯一の動機ですか、それとも私の非常に単純な例では明らかではない他の利点がありませんか?カレーは単なる構文糖ですか?

5
私もジュニアの開発者が読めるように「賢い」のでしょうか?JSの機能プログラミングが多すぎますか?[閉まっている]
私はバベルES6でコーディングしている上級フロントエンド開発者です。アプリの一部はAPI呼び出しを行い、API呼び出しから返されるデータモデルに基づいて、特定のフォームに入力する必要があります。 これらのフォームは二重リンクリストに格納されます(バックエンドがデータの一部が無効であると言った場合、ユーザーを混乱させた1ページにすばやく戻し、ターゲットを元に戻すことができます。リスト。) とにかく、ページを追加するために使用される関数の束があり、私はあまりにも賢いのだろうかと思っています。これは基本的な概要にすぎません-実際のアルゴリズムは非常に複雑で、さまざまなページやページタイプがありますが、例を挙げて説明します。 これが、初心者のプログラマーが処理する方法です。 export const addPages = (apiData) => { let pagesList = new PagesList(); if(apiData.pages.foo){ pagesList.add('foo', apiData.pages.foo){ } if (apiData.pages.arrayOfBars){ let bars = apiData.pages.arrayOfBars; bars.forEach((bar) => { pagesList.add(bar.name, bar.data); }) } if (apiData.pages.customBazes) { let bazes = apiData.pages.customBazes; bazes.forEach((baz) => { pagesList.add(customBazParser(baz)); }) } return pagesList; } さて、よりテストしやすくするために、これらのifステートメントをすべて取り、それらを分離し、スタンドアロンの機能にした後、それらをマップします。 …

3
トランポリンが機能するのはなぜですか?
私はいくつかの機能的なJavaScriptを実行しています。Tail-Call Optimizationが実装されたと思っていましたが、結局は間違っていました。したがって、私は自分でトランポリンを学ぶ必要がありました。ここや他の場所を少し読んだ後、基本を理解し、最初のトランポリンを作成することができました。 /*not the fanciest, it's just meant to reenforce that I know what I'm doing.*/ function loopy(x){ if (x<10000000){ return function(){ return loopy(x+1) } }else{ return x; } }; function trampoline(foo){ while(foo && typeof foo === 'function'){ foo = foo(); } return foo; /*I've seen trampolines without this, mine …

2
「Free Monad + Interpreter」パターンとは何ですか?
特にデータアクセスのコンテキストで、Interpreterを使用してFree Monadについて話している人々を見てきました。このパターンは何ですか?いつ使用したいですか?どのように機能し、どのように実装しますか? (このような投稿から)私はそれがモデルをデータアクセスから分離することだと理解しています。よく知られているリポジトリパターンとの違いは何ですか?彼らは同じ動機を持っているように見えます。


8
「副作用」とは何ですか?
副作用の概念を明確に理解していません。 プログラミングの副作用とは何ですか? プログラミング言語に依存していますか? 外部および内部の副作用などがありますか? 副作用を引き起こす原因の例をいくつか挙げてください。

3
引数を取らず、何も返さない関数の名前は何ですか?[閉まっている]
Java 8のjava.util.functionパッケージには、次のものがあります。 機能:1つの引数を取り、1つの結果を生成します。 消費者:1つの引数を取り、何も生成しません。 サプライヤ:引数をとらず、1つの結果を生成します。 ...:プリミティブ、2つの引数などを処理する他のケース... しかし、「引数を取らず、何も生成しない」場合を処理する必要があります。 これには何もありませんjava.util.functionnal。 したがって、質問は次のとおりです。 「引数を取らず、何も返さない関数」の名前は何ですか? Java 8では、その定義は次のようになります。 @FunctionalInterface public interface InsertANameHere { void execute(); } エグゼキューターは既に存在し、別の目的があります:「サブミットされたRunnableタスクを実行するオブジェクト」。署名は一致せず(execute(Runnable):void)、機能的なインターフェースすらありません。 Runnableは存在しますが、スレッドコンテキストに強くリンクされています。 パッケージがあるjava.lang、ありませんjava.util.function。 javadocの状態:「Runnableインターフェイスは、インスタンスがスレッドによって実行されることを意図しているクラスによって実装する必要があります」。 「Runnable」という名前は、スレッド内で実行中のコードを示唆しています。

6
すべての関数型プログラミングの設計パターンはどこにありますか?[閉まっている]
オブジェクト指向プログラミングの文献には、設計パターンがたくさんあります。オブジェクト指向プログラミングに関するほとんどの本は、工場やデコレーターのようなパターンを設計するために1〜2章を捧げています。それでは、関数型言語の同等のパターンとは何ですか?なぜそれらについて本を書いていないのですか?関数型言語について、デザインパターンの必要性を取り除く特別なものはありますか?

12
「すべてが地図です」、私はこれを正しくしていますか?
Stuart Sierraの講演「Thinking In Data」を見て、私が作っているこのゲームのデザイン原則として、そのアイデアの1つを取り上げました。違いは、彼はClojureで働いており、私はJavaScriptで働いていることです。その点で私たちの言語にはいくつかの大きな違いがあります Clojureは慣用的に機能するプログラミングです ほとんどの状態は不変です 「すべては地図です」というスライドからアイデアを取りました(11分、6秒から29分以上)。彼が言うことは次のとおりです。 2〜3個の引数をとる関数を見たときはいつでも、それをマップに変換してマップを渡すだけのケースを作成できます。これには多くの利点があります。 引数の順序を心配する必要はありません 追加情報を心配する必要はありません。余分なキーがある場合、それは私たちの関心事ではありません。ただ流れるだけで、干渉しません。 スキーマを定義する必要はありません オブジェクトを渡すのとは対照的に、データの非表示はありません。しかし、彼はデータの隠蔽が問題を引き起こす可能性があり、過大評価されていると主張しています。 性能 実装のしやすさ ネットワークまたはプロセスを介して通信するとすぐに、とにかくデータ表現について双方に同意する必要があります。これは、データだけを扱う場合はスキップできる余分な作業です。 私の質問に最も関連しています。これは、「機能を構成可能にする」で29分です。概念を説明するために彼が使用するコードサンプルは次のとおりです。 ;; Bad (defn complex-process [] (let [a (get-component @global-state) b (subprocess-one a) c (subprocess-two a b) d (subprocess-three a b c)] (reset! global-state d))) ;; Good (defn complex-process [state] (-> state subprocess-one subprocess-two subprocess-three)) …


4
関数型言語は乱数をどのように処理しますか?
私はそれについて意味することにということですほとんど、すべてのチュートリアル私は関数型言語について読んだ機能の優れた点の一つは、あなたが二度同じパラメータを持つ関数を呼び出す場合、あなたはだろうということであるということである常にで終わります同じ結果。 一体どのようにして、パラメータとしてシードを取り、そのシードに基づいて乱数を返す関数を作成しますか? これは、機能について非常に良いことの1つに反するように見えることを意味しますよね?または、私はここで何かが完全に欠けていますか?

4
マルチスレッドで関数型プログラミングは速くなりますか?物事の書き方が違うのか、物事のコンパイルが違うのですか?
私は関数型プログラミングの世界に飛び込んでいますが、関数型言語がマルチスレッド/マルチコアプログラムに適していることはどこでも読み続けています。再帰、乱数など、関数型言語がさまざまなことをどのように行うかを理解していますが、関数型言語でマルチスレッドが高速であるかどうかは、コンパイルが異なるため、または私がそれを書くためにわかりません。 たとえば、特定のプロトコルを実装するプログラムをJavaで作成しました。このプロトコルでは、2者は互いに何千ものメッセージを送受信し、それらのメッセージを暗号化し、何度も再送信(および受信)します。予想どおり、数千単位の規模を扱う場合、マルチスレッドが重要です。このプログラムには、ロックは含まれていません。 JVMを使用するScalaで同じプログラムを作成すると、この実装は高速になりますか?はいの場合、なぜですか?文章のスタイルが原因ですか?Javaがラムダ式を含むようになったため、書き込みスタイルが原因である場合、ラムダを使用したJavaを使用して同じ結果を達成できませんでしたか?または、Scalaが異なる方法でコンパイルするため、高速ですか?

5
関数型プログラミングでは、ほとんどのデータ構造を不変にするために、より多くのメモリ使用量が必要ですか?
関数型プログラミングでは、ほとんどすべてのデータ構造が不変であるため、状態を変更する必要がある場合、新しい構造が作成されます。これはより多くのメモリ使用量を意味しますか?オブジェクト指向プログラミングのパラダイムをよく知っているので、今は関数型プログラミングのパラダイムについて学ぼうとしています。すべてが不変であるという概念は私を混乱させます。不変の構造を使用するプログラムは、可変の構造を持つプログラムよりも多くのメモリを必要とするように思われます。私はこれを正しい方法で見ていますか?

4
矢印の目的は何ですか?
私はHaskellを使って関数型プログラミングを学んでいますが、なぜそれらが必要なのかを最初に理解して概念をつかもうとしています。 関数型プログラミング言語における矢印の目標を知りたいです。彼らはどのような問題を解決しますか?http://en.wikibooks.org/wiki/Haskell/Understanding_arrowsおよびhttp://www.cse.chalmers.se/~rjmh/afp-arrows.pdfを確認しました。私が理解しているのは、それらが計算用のグラフを記述するために使用され、より簡単なポイントフリースタイルのコーディングを可能にすることです。 この記事では、一般に、ポイントフリースタイルの方が理解しやすく、書きやすいと想定しています。これは非常に主観的なようです。別の記事(http://en.wikibooks.org/wiki/Haskell/StephensArrowTutorial#Hangman:_Main_program)では、絞首刑執行人のゲームが実装されていますが、この実装が矢印によってどのように自然になるかはわかりません。 コンセプトを説明する論文はたくさんありましたが、その動機については何も見つかりませんでした。 私は何が欠けていますか?

12
なぜ関数型プログラミングは業界でもっと人気がないのですか?今流行ってる?[閉まっている]
大学での4年間、私たちはいくつかの関数型プログラミング言語で多くの関数型プログラミングを使用してきました。しかし、私はまた多くのオブジェクト指向プログラミングを使用してきました。実際、自分の小さなプロジェクトを行って最初の仕事を準備するときには、オブジェクト指向言語をより多く使用します。しかし、これらのプロジェクトを行うときは、関数型プログラミング言語でコーディングしたかったことがよくあります。 ただし、仕事を探しているときに、関数型プログラミング言語の知識が必要な仕事を見つけることは非常にまれです。 なぜ関数型プログラミング言語は業界でもっと使われないのですか?最近では関数型プログラミング言語についてかなりのニュースがありますので、関数型プログラミングは今業界で流行しているのでしょうか?

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