問題タブ [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.
clojure - Clojure でのデータベース読み取りの処理
Clojure 関数の一部を「浄化」しようとしています。すべての副作用コードが 1 つの関数で明示的に宣言されるようにしたいと考えています。最初にデータを取得し、最後にそれを db に書き込み、その間に純粋な関数を変換するのは簡単です。ただし、通常の状況では、変換関数はロジックの途中で別の DB 読み取りを必要とします。
明らかにこれは非常に単純な例ですが、要点は、db/read
そこから副作用のある関数を取得するにはどうすればよいか、どうすればtransform-users
純粋にすることができるか (そして利点として、簡単にテストできるようにするか) です。
c# - [Pure] には、コード コントラクトに対する「目に見える副作用がない」以外の意味がありますか?
PureAttribute のドキュメントには次のように書かれています。
型またはメソッドが純粋であること、つまり、目に見える状態の変更を行わないことを示します
これは、Microsoft Code Contracts における Pure 関数の唯一の要件ですか?
と; このモデルは、例外は (副作用ではなく) 結果であると想定していますか?
より一般的な文脈では、純粋な関数 は、出力が入力のみに依存することも意味するためです。すなわち。I/O または確率関数の結果であってはなりません。
純粋な関数は、おそらく例外とは対照的に、常に外側の式に値を与えると主張する人もいるかもしれません。
[Pure] が実際に制限の少ない形式に限定されている場合、「[FunctionalPure]」に相当するものはありますか?
data-structures - カテナブルリストの append と uncons が単に償却された O(1) なのはなぜですか?
私は、Okasaki のカテナブル リストの実装を採用し、ブール盲目問題を回避するために少しリファクタリングしました。それ以外は、データ構造自体は変更されていません。
岡崎氏は著書の中で、O(1)
操作を伴うキューの実装 (最悪の場合または償却されたもの) を考えるappend
と、uncons
償却されると主張していますO(1)
。
なぜ彼の主張を強化できないのですか?リアルタイム キューの実装 (すべての操作が最悪の場合O(1)
)を考えるappend
と、私にuncons
は最悪の場合に見えO(1)
ます。のすべての再帰呼び出しはlinkAll
によって保護されており、どのL.delay
パブリック操作も 1 つ以上の中断を強制することはありません。私の推論 (または私のコード) は間違っていますか?
clojure - 「再ルート可能な」純粋に機能的なツリー データ構造
私は最近、系統樹を推測するための数学的および計算方法に関する素晴らしい本である Joseph Felsenstein によるInferring Phylogeniesを購入し、そこに記述されているアルゴリズムのいくつかを実装して遊んでいます。
具体的には、永続的なデータ構造を備えた機能的な設定で使用することに興味があります。多くの方法では、可能なツリーのスペースを歩く必要があり、構造を介して行ってきた場所の履歴を安価に覚えておくとよいでしょう。共有 (このブログ投稿の「ワールド」で aphyr が行うことのようなもの)、以前に計算されたサブツリーの値を簡単にキャッシュするなど。
これに関する問題は、多くの方法がツリーの「ルート変更」を伴うことであり、純粋に機能的な方法で安価に行う方法がわかりません。基本的に、次のそれぞれのアイデアをキャプチャする何らかの方法が必要です (ツリーをベクトルとして表す clojure 表記法を使用):
同じデータを表し、ルートが配置されている場所のみが異なります。それらはそれぞれ根のないツリーを表します。
これらのツリーの 1 つにジッパーで移動してから関数を呼び出すとreroot
、ルートが現在の になるように圧縮された新しいツリーが返されloc
ます。
Felsenstein という本の中で、低コストでルートを変更できるツリーのデータ構造について説明しています。
円は構造体で、矢印はポインタです。構造体のリングはツリーの内部ノードであり、構造体への参照を取得したら、ポインターの交換を行うことでルートをそこに移動できます。残念ながら、これは変更操作であり、相互参照が必要ですが、どちらも純粋に機能的な設定では不可能です。
ジッパーを使ってやりたいことをする方法があるはずだと思いますがclojure.core/zip
、しばらくいじっていて、どこにも行きません.
このようなものの実装を知っている人はいますか、または私が読むべきこと/私が見るべき論文/これを行う方法についてのアイデアについての提案はありますか?
ありがとう!
haskell - ネストされた純関数のランダム性
#
文字列内の各出現を別の乱数に置き換える関数を提供したいと考えています。非純粋な言語では、それは些細なことです。しかし、純粋な言語でどのように設計する必要がありますか? unsafePerformIO
はハックのように見え、適切な設計ではないため、使用したくありません。
この関数は、パラメーターの 1 つとしてランダム ジェネレーターを必要としますか? もしそうなら、そのジェネレーターは呼び出しのスタック全体を通過する必要がありますか? 他の可能なアプローチはありますか?State
ここでモナドを使うべきですか?実行可能なアプローチを示すおもちゃの例をいただければ幸いです...
python - 実行せずにPythonパッケージの内容を確認しますか?
name
の原因となった が与えられた場合、それを解決するために編集NameError
できる Python パッケージを識別できる関数が必要です。import
その部分はかなり簡単で、私はそれを実行しましたが、別の問題があります。副作用を引き起こさずに実行したいのです。これが私が今使っているコードです:
問題は、このコードが実際には__import__
すべてのモジュールであるということです。これは、すべてのモジュールをインポートすることのすべての副作用が発生することを意味します。コードをテストしたところ、すべてのモジュールをインポートすることによって引き起こされる可能性のある副作用には次のようなものがあることがわかりました。
- tkinter アプリケーションの起動
- でパスワードを要求する
getpass
- その他
input
またはraw_input
- メッセージの印刷 (
import this
) - ウェブサイトを開く (
import antigravity
)
私が考えた可能な解決策は、すべてのモジュールへのパスを見つけることです(どうやって?これを行う唯一の方法はimport
、モジュールを ing し、そこからいくつかのメソッドを使用するinspect
ことです)、それを解析してすべてを見つけることclass
です , def
,それ=
自体はclass
or内ではありませんdef
が、それは巨大な PITA のように思われ、純粋な Python ではなく C/C++ で実装されているモジュールでは機能しないと思います。
もう 1 つの可能性は、出力がリダイレクトされた子 Python インスタンスを起動してdevnull
そこでチェックを実行し、時間がかかりすぎる場合は強制終了することです。これで最初の 4 つの箇条書きが解決されantigravity
ます。しかし、この単一の関数で Python の何千ものインスタンスを起動しなければならないのは、少し... 重くて非効率的です。
私が考えていないより良い解決策を誰かが持っていますか? たとえば、モジュールを実際にインポートせずに、PythonにASTなどを生成するように指示する簡単な方法はありますか?
php - PHP はオブジェクトを値渡しします
PHPで純粋な関数を実装したい
オブジェクトを参照ではなく値で渡すにはどうすればよいですか?
つまり、これは予想される出力です。