問題タブ [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 投票する
2 に答える
185 参照

clojure - Clojure でのデータベース読み取りの処理

Clojure 関数の一部を「浄化」しようとしています。すべての副作用コードが 1 つの関数で明示的に宣言されるようにしたいと考えています。最初にデータを取得し、最後にそれを db に書き込み、その間に純粋な関数を変換するのは簡単です。ただし、通常の状況では、変換関数はロジックの途中で別の DB 読み取りを必要とします。

明らかにこれは非常に単純な例ですが、要点は、db/readそこから副作用のある関数を取得するにはどうすればよいか、どうすればtransform-users純粋にすることができるか (そして利点として、簡単にテストできるようにするか) です。

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

c# - [Pure] には、コード コントラクトに対する「目に見える副作用がない」以外の意味がありますか?

PureAttribute のドキュメントには次のように書かれています。

型またはメソッドが純粋であること、つまり、目に見える状態の変更を行わないことを示します

  1. これは、Microsoft Code Contracts における Pure 関数の唯一の要件ですか?

  2. と; このモデルは、例外は (副作用ではなく) 結果であると想定していますか?

より一般的な文脈では、純粋な関数 は、出力が入力のみに依存することも意味するためです。すなわち。I/O または確率関数の結果であってはなりません。

純粋な関数は、おそらく例外とは対照的に、常に外側の式に値を与えると主張する人もいるかもしれません。

[Pure] が実際に制限の少ない形式に限定されている場合、「[FunctionalPure]」に相当するものはありますか?

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

data-structures - カテナブルリストの append と uncons が単に償却された O(1) なのはなぜですか?

私は、Okasaki のカテナブル リストの実装を採用し、ブール盲目問題を回避するために少しリファクタリングしました。それ以外は、データ構造自体は変更されていません。

岡崎氏は著書の中で、O(1)操作を伴うキューの実装 (最悪の場合または償却されたもの) を考えるappendと、uncons償却されると主張していますO(1)

なぜ彼の主張を強化できないのですか?リアルタイム キューの実装 (すべての操作が最悪の場合O(1))を考えるappendと、私にunconsは最悪の場合に見えO(1)ます。のすべての再帰呼び出しはlinkAllによって保護されており、どのL.delayパブリック操作も 1 つ以上の中断を強制することはありません。私の推論 (または私のコード) は間違っていますか?

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

clojure - 「再ルート可能な」純粋に機能的なツリー データ構造

私は最近、系統樹を推測するための数学的および計算方法に関する素晴らしい本である Joseph Felsenstein によるInferring Phylogeniesを購入し、そこに記述されているアルゴリズムのいくつかを実装して遊んでいます。

具体的には、永続的なデータ構造を備えた機能的な設定で使用することに興味があります。多くの方法では、可能なツリーのスペースを歩く必要があり、構造を介して行ってきた場所の履歴を安価に覚えておくとよいでしょう。共有 (このブログ投稿の「ワールド」で aphyr が行うことのようなもの)、以前に計算されたサブツリーの値を簡単にキャッシュするなど。

これに関する問題は、多くの方法がツリーの「ルート変更」を伴うことであり、純粋に機能的な方法で安価に行う方法がわかりません。基本的に、次のそれぞれのアイデアをキャプチャする何らかの方法が必要です (ツリーをベクトルとして表す clojure 表記法を使用):

同じデータを表し、ルートが配置されている場所のみが異なります。それらはそれぞれ根のないツリーを表します。

これらのツリーの 1 つにジッパーで移動してから関数を呼び出すとreroot、ルートが現在の になるように圧縮された新しいツリーが返されlocます。

Felsenstein という本の中で、低コストでルートを変更できるツリーのデータ構造について説明しています。

ひどい図

円は構造体で、矢印はポインタです。構造体のリングはツリーの内部ノードであり、構造体への参照を取得したら、ポインターの交換を行うことでルートをそこに移動できます。残念ながら、これは変更操作であり、相互参照が必要ですが、どちらも純粋に機能的な設定では不可能です。

ジッパーを使ってやりたいことをする方法があるはずだと思いますがclojure.core/zip、しばらくいじっていて、どこにも行きません.

このようなものの実装を知っている人はいますか、または私が読むべきこと/私が見るべき論文/これを行う方法についてのアイデアについての提案はありますか?

ありがとう!

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

haskell - ネストされた純関数のランダム性

#文字列内の各出現を別の乱数に置き換える関数を提供したいと考えています。非純粋な言語では、それは些細なことです。しかし、純粋な言語でどのように設計する必要がありますか? unsafePerformIOはハックのように見え、適切な設計ではないため、使用したくありません。

この関数は、パラメーターの 1 つとしてランダム ジェネレーターを必要としますか? もしそうなら、そのジェネレーターは呼び出しのスタック全体を通過する必要がありますか? 他の可能なアプローチはありますか?Stateここでモナドを使うべきですか?実行可能なアプローチを示すおもちゃの例をいただければ幸いです...

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

python - 実行せずにPythonパッケージの内容を確認しますか?

nameの原因となった が与えられた場合、それを解決するために編集NameErrorできる Python パッケージを識別できる関数が必要です。import

その部分はかなり簡単で、私はそれを実行しましたが、別の問題があります。副作用を引き起こさずに実行したいのです。これが私が今使っているコードです:

問題は、このコードが実際には__import__すべてのモジュールであるということです。これは、すべてのモジュールをインポートすることのすべての副作用が発生することを意味します。コードをテストしたところ、すべてのモジュールをインポートすることによって引き起こされる可能性のある副作用には次のようなものがあることがわかりました。

  • tkinter アプリケーションの起動
  • でパスワードを要求するgetpass
  • その他inputまたはraw_input
  • メッセージの印刷 ( import this)
  • ウェブサイトを開く ( import antigravity)

私が考えた可能な解決策は、すべてのモジュールへのパスを見つけることです(どうやって?これを行う唯一の方法はimport、モジュールを ing し、そこからいくつかのメソッドを使用するinspectことです)、それを解析してすべてを見つけることclassです , def,それ=自体はclassor内ではありませんdefが、それは巨大な PITA のように思われ、純粋な Python ではなく C/C++ で実装されているモジュールでは機能しないと思います。

もう 1 つの可能性は、出力がリダイレクトされた子 Python インスタンスを起動してdevnullそこでチェックを実行し、時間がかかりすぎる場合は強制終了することです。これで最初の 4 つの箇条書きが解決されantigravityます。しかし、この単一の関数で Python の何千ものインスタンスを起動しなければならないのは、少し... 重くて非効率的です。

私が考えていないより良い解決策を誰かが持っていますか? たとえば、モジュールを実際にインポートせずに、PythonにASTなどを生成するように指示する簡単な方法はありますか?

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

php - PHP はオブジェクトを値渡しします

PHPで純粋な関数を実装したい

オブジェクトを参照ではなく値で渡すにはどうすればよいですか?

つまり、これは予想される出力です。