問題タブ [functional-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - クロージャを使用するのはいつですか?
クロージャのサンプルを見たことがあります- 「クロージャ」とは何ですか?
クロージャをいつ使用するかの簡単な例を誰かが提供できますか?
具体的には、閉鎖が理にかなっているシナリオですか?
言語がクロージャーをサポートしていないと仮定しましょう。それでも同様のことをどのように達成できるでしょうか。
Not to offend anyone, please post code samples in a language like c#, python, javascript, ruby etc.
I am sorry, I do not understand functional languages yet.
c# - C# の不変オブジェクト パターン - どう思いますか?
私はいくつかのプロジェクトの過程で、不変 (読み取り専用) オブジェクトと不変オブジェクト グラフを作成するためのパターンを開発しました。不変オブジェクトには、100% スレッドセーフであるという利点があるため、スレッド間で再利用できます。私の仕事では、このパターンを Web アプリケーションで、構成設定や、メモリにロードしてキャッシュするその他のオブジェクトによく使用します。キャッシュされたオブジェクトは、予期せず変更されないことを保証するために、常に不変である必要があります。
もちろん、次の例のように、不変オブジェクトを簡単に設計できます。
これは単純なクラスでは問題ありませんが、より複雑なクラスでは、コンストラクターを介してすべての値を渡すという概念は好きではありません。プロパティにセッターを設定することはより望ましく、新しいオブジェクトを作成するコードは読みやすくなります。
では、setter を使用して不変オブジェクトを作成するにはどうすればよいでしょうか。
さて、私のパターンでは、オブジェクトは最初から完全に変更可能であり、1 回のメソッド呼び出しでフリーズするまで続きます。オブジェクトが凍結されると、永久に不変のままになります。再び可変オブジェクトに変えることはできません。オブジェクトの変更可能なバージョンが必要な場合は、単純に複製します。
さて、いくつかのコードに進みます。次のコード スニペットでは、パターンを最も単純な形式に煮詰めようとしています。IElement は、すべての不変オブジェクトが最終的に実装する必要がある基本インターフェイスです。
Element クラスは、IElement インターフェイスのデフォルトの実装です。
上記の SampleElement クラスをリファクタリングして、不変オブジェクト パターンを実装しましょう。
MakeReadOnly() メソッドを呼び出してオブジェクトが不変としてマークされていない限り、Id プロパティと Name プロパティを変更できるようになりました。不変になると、setter を呼び出すと ImmutableElementException が発生します。
最後の注意: 完全なパターンは、ここに示すコード スニペットよりも複雑です。また、不変オブジェクトのコレクションと、不変オブジェクト グラフの完全なオブジェクト グラフのサポートも含まれています。完全なパターンでは、最も外側のオブジェクトで MakeReadOnly() メソッドを呼び出すことにより、オブジェクト グラフ全体を不変にすることができます。このパターンを使用してより大きなオブジェクト モデルの作成を開始すると、オブジェクトがリークするリスクが高まります。リーキー オブジェクトとは、オブジェクトに変更を加える前に FailIfImmutable() メソッドの呼び出しに失敗したオブジェクトです。リークをテストするために、単体テストで使用する一般的なリーク検出クラスも開発しました。リフレクションを使用して、すべてのプロパティとメソッドが ImmutableElementException を不変状態でスローするかどうかをテストします。つまり、TDD がここで使用されます。
私はこのパターンがとても好きになり、大きな利点を見つけました。ですから、私が知りたいのは、同様のパターンを使用している方がいるかどうかです。はいの場合、それを文書化した優れたリソースを知っていますか? 私は本質的に、潜在的な改善と、このトピックに関する既存の標準を探しています。
haskell - 遅延評価が役立つのはなぜですか?
なぜ遅延評価が便利なのか、私は長い間疑問に思っていました。理にかなった方法で私に説明してくれる人はまだいません。ほとんどの場合、それは「私を信頼してください」に要約されます。
注: メモ化という意味ではありません。
functional-programming - 機能的なスタイルの更新
これは矛盾した表現かもしれませんが、関数型プログラミング スタイルでデータ エンティティを更新するにはどうすればよいでしょうか。私が読んだ限りでは、関数型プログラミングは変換を使用して不変エンティティの出力を返します。私が考えることができる唯一のことは、元のエンティティを完全に置き換えることですが、それは従来の更新アプローチとほとんど同じようです.
f# - リストに対して車とカードを実行するにはどうすればよいですか?
いくつかのコードがあるとします:
Lisp 記法を使用して、このリストに対してcar
andを実行するにはどうすればよいですか? cadr
短所は知ってい::
ます。
またはスキームで、first
そしてrest
?
database - 健忘症患者の「最初の」機能言語? (私はClojureが本当に好きです...)
私は最近、前向性健忘症の可能性のある既存の症例に加えて、逆行性健忘症を引き起こす連鎖性解離性障害と診断されました. 多くの人が、私が以前の偉大なプログラマーであったことを思い出させようとしました。今は概念とイディオムを理解していますが、知っているかどうかにかかわらず、独学で学びたいと思っています。それによって記憶喪失の問題を克服できると思います。
stackoverflow さんへの私の質問は次のとおりです。最近 Clojure を見つけました。見つけた Web ページから例をコピーするだけでも、使い心地が良いです。関数型プログラミング言語を学ぶ私の目標は、簡単な Web サーバー、さまざまな種類の irc AI ボット、couchdb のようなデータベース システムを作成することです。これらはすべて、軽量で特に教育用です。Clojure にはどのような欠陥がありますか? 教育/および/アプリケーションのために今すぐ使用するより良い関数型プログラミング言語はありますか?
functional-programming - 関数型プログラミングは自然言語プログラミングへの次のステップですか?
これは私の最初の質問なので、意味が十分に伝わるかどうかわからないので、少し緊張しています. ともあれ、いざ……。
プログラミングの新しいマイルストーンに到達するたびに、常に共通の目標が 1 つあるように思われます。
機械語、オペコード/ニーモニック、プロシージャ/関数、構造体、クラス (OOP) などは、常に、より自然で理解しやすく保守しやすい方法でプログラムを計画、構造化、コーディングするのに役立ちました。
もちろん、関数型プログラミングは決して目新しいものではありませんが、近年、ある種のルネッサンスを経験しているようです。また、Microsoft が F# を主流のプログラミング言語に追加することで、FP が大幅に強化されると考えています。
元の質問に戻りますが、プログラミングは最終的には制限や規則がほとんどない自然言語 (英語) で行われると思います。コンパイラは、コードから情報を抽出する AI/NLP システムの一部になります。テキストと言うべきか、コンパイラがコンパイルできる中間言語に変換します。
では、FP はプログラミングを自然言語プログラミングに近づけるのでしょうか?それともむしろ障害であり、主流の OOP が私たちを自然言語プログラミングにより速く導くのでしょうか?
この質問は、自然言語プログラミングの使いやすさや実現可能性について議論するために使用すべきではありません。未来だけが教えてくれるからです。
functional-programming - 機能モデルのようなものはありますか?
オブジェクト指向パラダイムでは、OO 言語を使用して実装を開始する前に、オブジェクト/概念モデルを作成します。
関数型プログラミングのオブジェクト モデルに類似するものはありますか。それは機能モデルと呼ばれますか?または、どちらかの言語で実装する前に、両方のパラダイムで同じ概念モデルを作成します。
機能モデルが存在する場合、機能モデルについて読むことができる記事/本はありますか?
または別の言い方をすれば...関数型プログラミング言語を使用している場合でも、オブジェクトモデルから始めますか?
algorithm - 関数型言語 (Haskell) の高速要素検索
グラフをトラバースしていて、ノードが以前に見られたかどうかをすばやく判断したいとします。いくつかの前提条件が設定されています。
- ノードは整数値 1..N でマークされています
- グラフは、隣接リストを持つノードで実装されます
- 1..N のすべての整数値がグラフに出現し、サイズは N です。
純粋に機能的な方法でこれを行うためのアイデアはありますか?(ハッシュテーブルまたは配列は許可されていません)。
2 つの関数が動作するデータ構造が必要です。add (遭遇した整数を追加) および lookup (整数が追加されたかどうかをチェック)。どちらも、N回の繰り返しで償却されるO(n)時間かかることが望ましいです。
これは可能ですか?
functional-programming - ポータブル継続をサポートする高速言語はありますか?
ポータブル継続をサポートする高速言語(つまり、ネイティブにコンパイルしてCの3倍または4倍以下のパフォーマンスを実現できる言語)を探しています。これは、あるコンピューターでシリアル化でき、別のコンピューターで逆シリアル化できる継続を意味します。
SISCがこれ(JavaでのSchemeの実装)を実行できることは知っていますが、速度は遅くなります。Rhinoの同上(JavaでのJavascript実装)。