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

関数型プログラミングは、関数を使用して抽象化を構築し、副作用や状態の変化を回避することに基づくプログラミングパラダイムです。純粋な関数型プログラミングはスレッドセーフです。

17
変更可能な状態なしでどのようにして有用なことを実行できますか
私は最近、関数型プログラミングについて多くのことを読んでいますが、そのほとんどは理解できますが、頭に入れられないのは、ステートレスコーディングです。ミュータブルな状態を削除してプログラミングを単純化することは、ダッシュボードを削除して自動車を「単純化」するようなものだと思います。 私が考えることができるほぼすべてのユーザーアプリケーションは、コアコンセプトとして状態を含みます。ドキュメント(またはSOポスト)を作成すると、状態は新しい入力ごとに変化します。または、ビデオゲームをプレイする場合、すべてのキャラクターの位置をはじめ、絶えず動き回る傾向のある状態変数がたくさんあります。値の変化を追跡せずに、どうすれば便利なことをできるでしょうか? この問題について説明しているものを見つけるたびに、それは私が持っていないFPのバックグラウンドが重いと想定して、本当にテクニカルなファンクショナルで書かれています。命令型コーディングについて十分に理解しているが、機能面で完全なn00bである人にこれを説明する方法を知っている人はいますか? 編集:これまでの返信の多くは、不変値の利点を私に納得させようとしているようです。私はその部分を手に入れました。それは完全に理にかなっています。私が理解していないのは、変更可能な変数を使用せずに、変更する必要がある値を常に追跡する方法です。

8
underscore.jsをテンプレートエンジンとして使用する方法
サーバーサイド言語および関数型言語としてのJavaScriptの新しい使用法について学習しようとしています。数日前、node.jsとExpressフレームワークについて聞いたことがあります。次に、underscore.jsをユーティリティ関数のセットとして見ました。私はこの問題をstackoverflowで 見ました。これは、テンプレートエンジンとしてunderscore.jsを使用できることを示しています。特に高度なJavaScriptの経験が少ない初心者のために、テンプレートにunderscore.jsを使用する方法についてのチュートリアルは、誰でも知っています。ありがとう

4
Scalaの「リフティング」とは何ですか?
Scalaエコシステムの記事を読むとき、「リフティング」/「リフティング」という用語を読むことがあります。残念ながら、その正確な意味は説明されていません。調べてみたところ、リフティングは関数の値などに関係しているようですが、リフティングが初心者にやさしい方法で実際に説明しているテキストは見つかりませんでした。 その名前にリフティングがあるLiftフレームワークを介してさらに混乱がありますが、それは質問に答える助けにはなりません。 Scalaの「リフティング」とは何ですか?

17
手続き型プログラミングと関数型プログラミングの違いは何ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 昨年休業。 この質問を改善する 手続き型プログラミングと関数型プログラミングの両方についてウィキペディアの記事を読みましたが、まだ少し混乱しています。誰かが核心までそれを煮詰めることができますか?

11
nullのない言語の最良の説明
プログラマーがnullエラー/例外について不平を言っているとき、誰かがnullなしで何をするかを尋ねられます。 私はオプションタイプのクールさについていくつかの基本的な考えを持っていますが、それを最もよく表現する知識や言語スキルがありません。何が偉大な私たちはその人の方を指すことができると平均プログラマに親しみの方法で書かれた以下の説明は? 参照/ポインタがデフォルトでnull可能になるのは望ましくない 次のようなnullのケースを簡単にチェックするための戦略を含む、オプションタイプの仕組み パターンマッチングと モナディック内包表記 メッセージを食べないなどの代替ソリューション (私が逃した他の側面)

15
オブジェクトの配列のJavaScript削減
のa.x各要素を合計したいとしarrます。 arr = [{x:1},{x:2},{x:4}] arr.reduce(function(a,b){return a.x + b.x}) >> NaN ある時点で斧が未定義であると信じる原因があります。 以下は正常に動作します arr = [1,2,4] arr.reduce(function(a,b){return a + b}) >> 7 最初の例で何が間違っていますか?

17
関数型プログラミングでは、ファンクタとは何ですか?
関数型プログラミングに関するさまざまな記事を読んでいる間、「Functor」という用語に何度か遭遇しましたが、著者は通常、読者がこの用語をすでに理解していると想定しています。Webを見回すと、過度に技術的な説明(Wikipediaの記事を参照)または信じられないほどあいまいな説明(このocamlチュートリアルWebサイトの Functorsのセクションを参照)が提供されています。 誰かが親切に用語を定義し、その使用法を説明し、おそらくファンクターがどのように作成され使用されるかの例を提供できますか? 編集:私はこの用語の背後にある理論に興味がありますが、その概念の実装と実際の使用には興味がありません。 編集2:いくつかのクロスターミノリジーが起こっているように見えます:私は特にC ++の関数オブジェクトではなく、関数型プログラミングのファンクターに言及しています。

16
Pythonのzip関数に相当するJavaScript
Pythonのzip関数に相当するJavaScriptはありますか?つまり、同じ長さの複数の配列を指定すると、ペアの配列が作成されます。 たとえば、次のような3つの配列があるとします。 var array1 = [1, 2, 3]; var array2 = ['a','b','c']; var array3 = [4, 5, 6]; 出力配列は次のようになります。 var output array:[[1,'a',4], [2,'b',5], [3,'c',6]]

17
キーを含むPHPのarray_map
このようなことをする方法はありますか? $test_array = array("first_key" => "first_value", "second_key" => "second_value"); var_dump(array_map(function($a, $b) { return "$a loves $b"; }, array_keys($test_array), array_values($test_array))); しかし、array_keysand を呼び出す代わりにarray_values、$test_array変数を直接渡しますか? 望ましい出力は次のとおりです。 array(2) { [0]=> string(27) "first_key loves first_value" [1]=> string(29) "second_key loves second_value" }

6
文字列から1つの文字列へのリスト
あなたが持っているとしましょう: List<string> los = new List<string>(); このクレイジーな関数型の世界では、これらの1つがこれらを連結して1つの文字列を作成するのに最適である、これらの日に住んでいます。 String.Join(String.Empty, los.ToArray()); StringBuilder builder = new StringBuilder(); los.ForEach(s => builder.Append(s)); string disp = los.Aggregate<string>((a, b) => a + b); またはプレーンな古いStringBuilder foreach またはより良い方法はありますか?

11
JavaScriptで不変性がそれほど重要(または必要)なのはなぜですか?
私は現在、React JSとReact Nativeフレームワークに取り組んでいます。途中、FacebookのFluxとReduxの実装について読んでいたときに、ImmutabilityまたはImmutable-JSライブラリに遭遇しました。 問題は、なぜ不変性がそれほど重要なのかということです。オブジェクトの変更の何が問題になっていますか?それは物事を単純にしませんか? 例を挙げて、オープニング画面がニュースの見出しのリストビューである単純なニュースリーダーアプリを考えてみましょう。 最初に値を持つオブジェクトの配列と言うと、最初は操作できません。それは不変性の原則が言っていることですよね?(間違っている場合は修正してください。)しかし、更新する必要がある新しいNewsオブジェクトがある場合はどうなりますか?通常の場合は、オブジェクトを配列に追加するだけで済みます。この場合、どうすれば達成できますか?ストアを削除して再作成しますか?オブジェクトを配列に追加する方が安価な操作ではありませんか?

13
関数型プログラミングのソフトウェアエンジニアリング手法はありますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 この質問を改善する 今日教えられているソフトウェア工学は、完全にオブジェクト指向プログラミングと「自然な」オブジェクト指向の世界観に焦点を当てています。ドメインモデルをいくつかのステップとユースケース図やクラス図のような多くの(UML)アーティファクトを持つクラスモデルに変換する方法を説明する詳細な方法があります。多くのプログラマーがこのアプローチを取り入れており、オブジェクト指向アプリケーションをゼロから設計する方法について優れたアイデアを持っています。 新しい誇大広告は関数型プログラミングであり、多くの本やチュートリアルで教えられています。しかし、機能的なソフトウェア工学についてはどうでしょうか?LispとClojureについて読んでいるとき、私は2つの興味深いステートメントについて思いつきました。 関数型プログラムは、多くの場合、トップダウンではなくボトムアップで開発されます(「On Lisp」、Paul Graham) 関数型プログラマーはマップを使用し、オブジェクト指向プログラマーはオブジェクト/クラスを使用します(「Clojure for Java Programmers」、Rich Hickleyによる講演)。 では、LispやClojureなどの機能的アプリケーションの体系的な(モデルベースの)設計の方法論とは何でしょうか。一般的な手順は何ですか、どのアーティファクトを使用しますか、それらを問​​題空間からソリューション空間にどのようにマッピングしますか?

11
関数型プログラミングがまだ引き継がれていないのはなぜですか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 私は宣言型/関数型プログラミング(言語)に関するテキストを読んだり、Haskellを試したり、自分で書いたりしました。私が見てきたことから、関数型プログラミングには、古典的な命令型スタイルに比べていくつかの利点があります。 ステートレスプログラム; 副作用なし 並行性; 増加するマルチコアテクノロジーで非常に優れた再生 プログラムは通常短く、場合によっては読みやすくなります 生産性が上がる(例:Erlang) 命令型プログラミングは非常に古いパラダイムであり(私の知る限り)、21世紀にはおそらく適さない なぜ企業が関数型言語で使用されているプログラムや関数型言語で書かれたプログラムがまだ「まれ」であるのですか? 関数型プログラミングの利点を検討するときに、依然として命令型プログラミング言語を使用しているのはなぜですか? 1990年には早すぎるかもしれませんが、今日はどうでしょうか。

7
ScalaのfoldLeftとreduceLeftの違い
私は基本的な違いを学んだの間foldLeftとreduceLeft foldLeft: 初期値を渡す必要があります reduceLeft: コレクションの最初の要素を初期値として受け取ります コレクションが空の場合は例外をスローします 他に違いはありますか? 同様の機能を持つ2つのメソッドがある特定の理由は?

6
Python:functools.partialが必要なのはなぜですか?
部分的なアプリケーションはクールです。functools.partialラムダを通過できない機能は何ですか? >>> sum = lambda x, y : x + y >>> sum(1, 2) 3 >>> incr = lambda y : sum(1, y) >>> incr(2) 3 >>> def sum2(x, y): return x + y >>> incr2 = functools.partial(sum2, 1) >>> incr2(4) 5 でfunctools、より効率的、あるいは読める何とか?

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