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

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


30
モナドとは何ですか?
最近Haskellを手短に見てきたが、モナドが本質的に何であるかに関して、簡潔で簡潔で実用的な説明は何だろうか? 私が遭遇したほとんどの説明は、かなりアクセスしにくく、実用的な詳細に欠けていることがわかりました。

18
(関数型)反応型プログラミングとは何ですか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 リアクティブプログラミングに関するウィキペディアの記事を読みました。関数型リアクティブプログラミングに関する小さな記事も読んだ。説明は非常に抽象的なものです。 関数型反応プログラミング(FRP)は実際にはどういう意味ですか? (非リアクティブプログラミングとは対照的に)リアクティブプログラミングは何で構成されていますか? 私の背景は命令型/オブジェクト指向言語なので、このパラダイムに関連する説明をいただければ幸いです。

30
オブジェクトのマップ関数(配列の代わり)
私はオブジェクトを持っています: myObject = { 'a': 1, 'b': 2, 'c': 3 } Array.prototype.map次のように使用されるのと同様のネイティブメソッドを探しています。 newObject = myObject.map(function (value, label) { return value * value; }); // newObject is now { 'a': 1, 'b': 4, 'c': 9 } JavaScriptはmapオブジェクトに対してそのような関数を持っていますか?(これはNode.JSに必要なので、ブラウザー間の問題は気にしません。)

28
関数型プログラミングはGoF設計パターンを置き換えるものですか?
昨年F#とOCamlの学習を始めて以来、デザインパターン(特にJavaの場合)が命令型言語で欠落している機能の回避策であると主張する記事を数多く読みました。私が見つけた1つの記事はかなり強い主張をしています: 私が会ったほとんどの人は、Gang of Four(GoF)によるデザインパターンの本を読んだことがあります 。自尊心のあるプログラマーなら誰でも、その本は言語にとらわれず、パターンは、使用する言語に関係なく、ソフトウェアエンジニアリング全般に当てはまることを教えてくれます。これは高貴な主張です。残念ながら、それは真実からかけ離れています。 関数型言語は非常に表現力があります。関数型言語では、言語が非常に高レベルである可能性が高いため、設計パターンは必要ありません。結局、設計パターンをすべて排除する概念でプログラミングすることになります。 関数型プログラミング(FP)の主な機能には、ファーストクラスの値、カリー化、不変値などの関数が含まれます。OOデザインパターンがこれらの機能のいずれかに近似していることは明らかではありません。 さらに、OOPをサポートする関数型言語(F#やOCamlなど)では、これらの言語を使用するプログラマーが、他のすべてのOOP言語で利用可能な同じデザインパターンを使用することは明らかです。実際、現在、私は毎日F#とOCamlを使用しており、これらの言語で使用するパターンとJavaで書くときに使用するパターンとの間に顕著な違いはありません。 関数型プログラミングによってOOP設計パターンが不要になるという主張に真実はありますか?もしそうなら、典型的なOOP設計パターンとそれに相当する機能の例を投稿またはリンクできますか?

30
JavaScriptには、指定された範囲内で範囲を生成するための「range()」のようなメソッドがありますか?
PHPでは、次のことができます... range(1, 3); // Array(1, 2, 3) range("A", "C"); // Array("A", "B", "C") つまり、上限と下限を渡すことで、数値または文字の範囲を取得できる関数があります。 このためにJavaScriptにネイティブで組み込まれているものはありますか?そうでない場合、どのように実装しますか?

14
リスト内包表記対ラムダ+フィルター
たまたま、基本的なフィルタリングの必要性があることに気づきました。リストがあり、アイテムの属性でフィルタリングする必要があります。 私のコードは次のようになりました: my_list = [x for x in my_list if x.attribute == value] でも、こんなふうに書いた方がいいのではないかと思いました。 my_list = filter(lambda x: x.attribute == value, my_list) より読みやすく、パフォーマンスに必要な場合はラムダを取り出して何かを取得できます。 質問です:2番目の方法を使用する際に注意点はありますか?パフォーマンスの違いはありますか?Pythonic Way™がまったくないので、さらに別の方法で実行する必要がありますか(ラムダの代わりにitemgetterを使用するなど)?

6
Hindley-Milnerのどの部分を理解していないのですか?
私はかつて不滅の言葉をフィーチャーした販売用のTシャツがあったことを誓います: のどの部分 分かりませんか? 私の場合、答えは...すべてです! 特に、Haskellの論文ではこのような表記がよく見られますが、その意味がわかりません。それがどういう数学の分野になるのか私にはわからない。 もちろんギリシャ語のアルファベットの文字と「∉」などの記号を認識します(これは通常、何かがセットの要素ではないことを意味します)。 一方、「⊢」は今まで見たことがありません(Wikipediaは「パーティション」を意味する可能性があると主張しています)。ここでのビンキュラムの使用についてもよく知りません。(通常は、分数を表し、それはしません表示され、ここでケースのように。) このシンボルの海が何を意味するのかを理解するためにどこから始めればよいかを誰かが少なくとも教えてくれれば、それは役に立ちます。


4
関数型プログラミングvsオブジェクト指向プログラミング[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 私はこれまで主にオブジェクト指向プログラミングに触れてきましたが、関数型言語を学ぶことを楽しみにしています。私の質問は: オブジェクト指向よりも関数型プログラミングを選ぶのはいつですか? 関数型プログラミングがより良い選択である典型的な問題定義は何ですか?

15
Haskellを使い始める
この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答や相互作用を受け入れていません。 数日間、Haskellの関数型プログラミングパラダイムに頭を抱えました。私はチュートリアルを読んだり、スクリーンキャストを見てこれを行いましたが、実際には何も固執していないようです。さて、さまざまな命令型/オブジェクト指向言語(C、Java、PHPなど)を学ぶ上で、エクササイズは私にとって良い方法でした。しかし、Haskellで何ができるか本当にわからないので、利用できる新しい概念がたくさんあるので、どこから始めればよいのかわかりません。 では、どのようにしてHaskellを学びましたか?本当に「氷を砕く」理由は何ですか?また、演習を始めるための良いアイデアはありますか?

19
分かりやすい英語のモナド?(FPのバックグラウンドがないOOPプログラマー向け)
OOPプログラマーが(関数型プログラミングのバックグラウンドなしで)理解できるという点で、モナドとは何ですか? それはどのような問題を解決し、それが使用される最も一般的な場所は何ですか? 編集: 私が探していた理解の種類を明確にするために、モナドを持つFPアプリケーションをOOPアプリケーションに変換するとします。モナドの責任をOOPアプリに移植するにはどうしますか?


13
時間関数は関数型プログラミングにどのように存在できますか?
私は関数型プログラミングについてあまり知らないことを認めざるを得ません。私はそれをあちこちから読んだので、関数型プログラミングでは、関数が何度呼び出されても、同じ入力に対して同じ関数が同じ出力を返すことがわかりました。これは、関数式に含まれる入力パラメーターの同じ値に対して同じ出力に評価される数学関数とまったく同じです。 たとえば、次のことを考慮してください。 f(x,y) = x*x + y; // It is a mathematical function 何回使ってf(10,4)もその価値は常にあります104。そのため、記述した場所はどこでも、式全体の値を変更せずに、でf(10,4)置き換えることができます104。このプロパティは、式の参照透過性と呼ばれます。 ウィキペディアが言うように(リンク)、 逆に、関数コードでは、関数の出力値は関数に入力された引数にのみ依存するため、引数xに対して同じ値で関数fを2回呼び出すと、同じ結果f(x)が両方生成されます。 (現在の時間を返す)時間関数は関数型プログラミングに存在できますか? はいの場合、どのようにして存在できますか?関数型プログラミングの原則に違反していませんか?これは、関数型プログラミングの特性の1つである参照の透過性に特に違反しています(正しく理解していれば)。 または、いいえの場合、関数型プログラミングの現在の時刻をどのように知ることができますか?

8
Haskellの大規模デザイン?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 3年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 特にHaskellで、大規模な関数型プログラムを設計/構造化する良い方法は何ですか? 私はたくさんのチュートリアルを行ってきました(Write Yourself a Schemeが私のお気に入りで、Real World Haskellがすぐ近くにあります)-ほとんどのプログラムは比較的小さく、単一目的です。さらに、それらのいくつかは特にエレガントであるとは見なしません(たとえば、WYASの膨大なルックアップテーブル)。 私は今、より多くの可動部分を備えたより大きなプログラムを書きたいと思っています-さまざまなソースからのデータの取得、クリーニング、さまざまな方法での処理、ユーザーインターフェイスでの表示、永続化、ネットワーク経由の通信など。このようなコードを読みやすく、保守しやすく、変化する要件に適応できるようにするための最良の構造はどれですか。 大規模なオブジェクト指向の命令型プログラムに関するこれらの質問に対処する非常に多くの文献があります。MVCやデザインパターンなどのアイデアは、OOスタイルでの関心の分離や再利用性などの幅広い目標を実現するための適切な処方箋です。さらに、新しい命令型言語は「成長するにつれて設計する」スタイルのリファクタリングに役立ちますが、私の初心者の意見では、Haskellはあまり適していないようです。 Haskellに相当する文献はありますか?エキゾチックな制御構造の動物園は、この目的のために関数型プログラミング(モナド、矢印、アプリケーションなど)でどのように利用するのが最適ですか?おすすめのベストプラクティスは何ですか。 ありがとう! 編集(これはドン・スチュワートの回答のフォローアップです): @donsは言及しました:「モナドはタイプで主要な建築デザインをキャプチャします。」 私の質問は、純粋な関数型言語での主要なアーキテクチャ設計についてどのように考えればよいのでしょうか。 いくつかのデータストリームといくつかの処理ステップの例を考えてみましょう。データストリームのモジュラーパーサーを一連のデータ構造に書き込むことができ、各処理ステップを純粋な関数として実装できます。1つのデータに必要な処理手順は、その値や他のデータによって異なります。一部の手順の後には、GUIの更新やデータベースクエリなどの副作用が伴う必要があります。 データと解析ステップを適切に結び付ける「正しい」方法は何ですか?さまざまなデータ型に対して正しいことを行う大きな関数を書くことができます。または、モナドを使用して、これまでに処理されたものを追跡し、各処理ステップでモナドの状態から次に必要なものをすべて取得することもできます。または、大部分が別個のプログラムを作成してメッセージを送信することもできます(このオプションはあまり好きではありません)。 彼がリンクしたスライドには、「デザインを型/関数/クラス/モナドにマッピングするためのイディオム」という箇条書きが必要です。イディオムとは何ですか?:)

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