問題タブ [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.

0 投票する
1 に答える
496 参照

data-structures - この単純な純粋に機能的なキューは有効ですか?

次のように、Lisp (Scheme) で純粋に機能的なキューを開発しました。

delay-cons は cons に似ていますが、末尾をクロージャでラップすることにより、末尾の評価を一時停止します。同様に、delay-append (delay-append st) は、t を末尾の再帰的な中断によって s に追加します。

したがって、各エンキューはクロージャの 1 つのレイヤーをラップして O(1) にし、各ピークは単純に値を取得して O(1) にし、各デキューは 1 つのクロージャを取得して評価し、O(1) にします。

これは他では見たことがありません。たとえば、Okasaki の Purely Functional Data Structures では、最も単純なキューは Banker's Queue であり、これはこれよりもはるかに複雑で、O(1) のエンキュー、ピーク、およびデキューのみを償却しています。これは、私の推論に誤りがあるのではないかと疑っています。

このデータ構造は健全ですか?どこかにそれに対する参照はありますか?

編集: delay-cons は、ここで delay-append で使用するのは間違っています。マクロのような関数を使用しようとしています (Will Ness に感謝します)。

を使って修正してみました

しかし、これは API では機能しません。

0 投票する
1 に答える
309 参照

recursion - Joel Spolsky は、変数の値が変化せず、同時に変化しないというパラドックスで何を意味しましたか?

私は約 8 か月前に The perils of Java Schoolsを読み、それ以来、すぐに学ぶべきことのチェックリストとして使用しています。私は彼が話していることのほとんどを理解しています。

ただし、よくわからない部分があります。

純粋に機能的なプログラムでは、変数の値は決して変化しませんが、常に変化します! パラドックス!

このことから私が得ているのは (私が間違っていたら許してください)、彼は再帰について話しているということですが、再帰は
概念が単純すぎるように思えます。これが私の考えです:

出力されているものを見るとn、末尾再帰関数の の値はまだ変化していませんが、実際に変化していることがわかります。tail-recまた、関数自体は
変数の状態を変更していないため、純粋に関数であることを意味します。
すぅ…
これでいいのか?
これはジョエルが話していたことですか?そうでない場合は、私を修正してください。

0 投票する
3 に答える
6024 参照

functional-programming - 純粋な関数型プログラミングで副作用を実行する方法は?

私はしばらく関数型プログラミングの概念を扱っていますが、非常に興味深く、魅力的で、刺激的であると感じています。特に、純粋関数のアイデアは、さまざまな点で素晴らしいです。

しかし、私が得られないことが 1 つあります。それは、自分自身を純粋な関数に制限する場合の副作用に対処する方法です。

たとえば、2 つの数値の合計を計算したい場合は、(JavaScript で) 純粋な関数を記述できます。

全く問題無い。しかし、結果をコンソールに出力したい場合はどうすればよいでしょうか? 「何かをコンソールに出力する」タスクは定義上純粋ではありませんが、純粋な関数型プログラミング言語でこれをどのように処理できますか?

0 投票する
2 に答える
131 参照

d - D で文字列を構築する好ましい方法

関数の属性@safepureおよびnothrow親関数のコンパイル時と実行時のパフォーマンスに関して、文字列を構築するための推奨される方法は何ですか?

たとえば、どちらを使用する必要がありますか

また

formatバージョンの方が見やすいと思いますが、他の点では優れていますか?

フォーマット文字列とその引数を CTFE する必要があるため、コンパイル時にわずかなパフォーマンス ヒットが発生する可能性があります。

0 投票する
3 に答える
195 参照

f# - F# は非決定性を管理するために何を提供できますか?

現実世界と対話するアプリケーションでは、非決定論的関数の使用は避けられません。決定論的と非決定論的を明確に区別することが重要です。

Haskell には IO モナドがあります。これは、その外側のすべてが純粋であることがわかっているものを見て、不純なコンテキストを設定します。あなたが私に尋ねると、ユニットテストに関しては、コードのどの部分が最終的にテスト可能で、どの部分がそうでないかを知ることができます。

F# で 2 つを分離できるものは見つかりませんでした。それしか方法がないということですか?

0 投票する
1 に答える
1155 参照

haskell - Haskellの純粋な関数が変数のローカルコピーを変更することは可能ですか?

Haskell の純粋な関数が変数のローカル コピーを変更することは可能ですか? 関数型プログラミングは詐欺です! 、デビッド・ノーレン?そうでない場合、これの理由は何ですか?もしそうなら、誰かが私に指摘できる例はありますか?

呼び出し元には純粋に見えるが、内部的にミューテーションを使用する関数で同様の質問がなされました。一般的なコンセンサスは、ミューテーションが変数のローカル コピーに対して実行される限り (つまり、効果の変異は関数をエスケープせず、非局所的な効果があります)。

リストを変更しないShen ( Local Mutation, global Mutation, mutable datastructures , Bubblesort in Qi )のバブルソートを Common Lisp に翻訳し、変更する Common LispBubblesortのバブルソートと比較すると、疑問が生じました。リスト。その結果、(Common Lisp では) リストを変更したバージョンは、非常に大きなリストの場合、リストを変更しなかったバージョンよりも大幅に高速であることがわかりました。

0 投票する
0 に答える
84 参照

.net - 純粋関数または非純粋関数を強調表示するための F# の規則はありますか?

純粋な関数と副作用のある関数を強調するために F# で使用される規則はありますか?

Contracts 名前空間に Pure 属性があることを確認しました。しかし、これは CodeContracts のヘルパーのようです。F# で純粋な関数を強調しようとする人さえいますか?

0 投票する
2 に答える
131 参照

caching - D のメモ化された関数の純度

Dで関数をメモ化するときに純粋さを維持する賢い方法はありますか?

RAM に保持されている大規模なデータセットの SHA1 計算をキャッシュするときに、これが必要です。