問題タブ [purely-functional]
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.
memory-management - 純粋関数型言語が参照カウントを使用しないのはなぜですか?
純粋関数型言語では、データは不変です。参照カウントでは、参照サイクルを作成するには、作成済みのデータを変更する必要があります。純粋に関数型の言語は、サイクルの可能性を気にせずに参照カウントを使用できるようです。そうですね?もしそうなら、なぜ彼らはしないのですか?
多くの場合、参照カウントは GC よりも遅いことは理解していますが、少なくとも一時停止時間は短縮されます。一時停止時間が悪い場合に参照カウントを使用するオプションがあると便利です。
haskell - 純粋関数型言語での効率的なヒープ
Haskell の演習として、ヒープソートを実装しようとしています。ヒープは通常、命令型言語では配列として実装されますが、これは純粋な関数型言語では非常に非効率的です。そこで私はバイナリ ヒープを調べましたが、これまでに見つけたものはすべて命令的な観点からそれらを説明しており、提示されたアルゴリズムは機能的な設定に変換するのが困難です。Haskell などの純粋関数型言語でヒープを効率的に実装する方法は?
編集:効率的とは、まだ O(n*log n) である必要があることを意味しますが、C プログラムに勝る必要はありません。また、純粋に関数型プログラミングを使用したいと思います。Haskellでそれを行うことのポイントは何ですか?
c++ - C++ で不純なテンプレートを書くことは可能ですか?
C++ で不純なテンプレートを書くことは可能ですか? つまり、同じテンプレート パラメーターに対して異なる結果の型または int を与えることがあるテンプレートです。たとえば、あるときとあるときのテンプレートFoo<T>
を書くことは可能ですか? または、10 の場合もあれば 20 の場合もあるテンプレートはありますか?Foo<int>::type
char
float
Foo<T>
Foo<double>::my_static_const_int
monads - 純粋関数型プログラミング言語における副作用のメソッド
現時点では、副作用を純粋な関数型プログラミング言語に統合する次の方法を認識しています。
- 効果システム
- 続き
- ユニークなタイプ
- モナド
モナドは、これを行うための最も効果的で最も一般的な方法であるとよく言われます。
他にどのような方法がありますか? それらはどのように比較されますか?
clojure - Clojure: 慣用的な Clojure のやり方で java.util.HashMap を操作する
java.util.HashMap
オブジェクト(Java コードの呼び出しからの戻り値)がm
あり、キーと値のペアを追加して新しいマップを取得したいと考えています。
Clojure マップの場合m
は、次を使用できます。
しかし、それを試してみると、次のようになりHashMap
ます。
java.lang.ClassCastException: java.util.HashMap は clojure.lang.Associative にキャストできません
どちらでも運が悪いseq
:
java.lang.ClassCastException: clojure.lang.IteratorSeq は clojure.lang.Associative にキャストできません
私がそれを行うことができた唯一の方法は、HashMap
の独自のものを使用することでしたput
が、それは返さvoid
れるため、明示的に返す必要がありますm
:
これは慣用的な Clojure コードではありませんm
。また、新しいマップを作成するのではなく、変更しています。
HashMap
より Clojure っぽい方法で aを操作するには?
scala - 純粋に機能的な同時スキップ リスト
スキップ リスト(Pugh、1990 年) は、検索ツリーのような対数時間操作で並べ替えられた辞書を提供しますが、スキップ リストは同時更新にはるかに適しています。
効率的な純粋に機能的な同時スキップ リストを作成することは可能ですか? そうでない場合、効率的な純粋に機能的な同時ソート辞書を作成することは可能ですか?
data-structures - 純粋に機能的なデータ構造の利点は何ですか?
データ構造に関するテキストは多数あり、データ構造コードのライブラリもあります。純粋に機能的なデータ構造の方が推論しやすいことを理解しています。ただし、命令型のコードよりも、実用的なコードで純粋に関数型のデータ構造を使用することの実際の利点を理解するのは困難です(関数型プログラミング言語を使用するかどうかは関係ありません)。純粋に機能的なデータ構造に利点がある実際の事例を誰かが提供できるでしょうか。その理由は何ですか。
私のような例では、programming_languageでdata_structure_nameを使用してアプリケーションを実行します。これは、 certain_thingを実行できるためです。
ありがとう。
PS:純粋に機能的なデータ構造とは、永続的なデータ構造と同じではありません。永続データ構造は変わらないデータ構造ですか?一方、純粋に機能するデータ構造は、純粋に機能するデータ構造です。
data-structures - 純粋に機能的にはweakhashmapと同等ですか?
Java の弱いハッシュ マップのような弱いハッシュ テーブルは、弱い参照を使用して、ガベージ コレクターによって到達不能なキーのコレクションを追跡し、コレクションからそのキーとのバインディングを削除します。ウィーク ハッシュ テーブルは通常、グラフ内の 1 つの頂点またはエッジから別の頂点またはエッジへの間接化を実装するために使用されます。
このデータ構造に純粋に機能的に相当するものはありますか? そうでない場合、どのように作成できますか?
これは興味深い挑戦のようです。到達不能な部分を削除するためにデータ構造を収集 (つまり、変更) する必要があるため、内部実装は純粋ではありませんが、データの一部にしか影響しないため、不純物を観察することができなかったユーザーに純粋なインターフェイスを提供できると思います。定義上、ユーザーが到達できない構造。
language-agnostic - 純度と参照透過性
用語の定義は異なっているように見えます が、私は常に一方が他方を意味すると考えてきました。式が参照透過性であるが純粋ではない場合、またはその逆の場合は考えられません。
ウィキペディアは、これらの概念について個別の記事を維持しており、次のように述べています。
参照透過性から:
式に含まれるすべての関数が純粋関数である場合、式は参照透過性です。また、一部の不純な関数は、それらの値が破棄され、それらの副作用が重要でない場合、式に含めることができます。
純粋な表現から:
純粋式を構築するには純粋関数が必要です。[...]純粋な表現は、参照透過性と呼ばれることがよくあります。
これらのステートメントは紛らわしいと思います。いわゆる「不純な関数」による副作用が、プログラムを大幅に変更せずに実行できない(つまり、そのような関数の呼び出しをその値に置き換える)ほど重要でない場合、それは、そもそもね。
純粋な式と参照透過性の式の違いを理解するためのより簡単な方法はありますか?違いがある場合は、それを明確に示す式の例をいただければ幸いです。
functional-programming - 純粋関数型言語は本当に不変性を保証しているのでしょうか?
純粋に関数型の言語では、「i <- 3」などのコマンドが不変変数 i を直接代入する代わりに、「<-」などの「代入」演算子を定義することはできませんでした。新しいコール スタックで i を 3 に置き換え、その時点から新しいコール スタックを実行することを除いて、現在のコール スタック全体のコピー? 実際に変更されたデータがないことを考えると、それは定義上「純粋に機能的」と見なされませんか? もちろん、コンパイラは i に 3 を代入するだけの最適化を行います。この場合、命令型と純粋関数型の違いは何でしょう?