私はClojureと一般的な関数プログラミング(Pythonに由来)を学んでいます。 Clojureでは、slurpや他の入力手段を使うことができるので、不純な関数を作ることは可能です。 Clojureで不純な関数を簡単に識別する方法はありますか、あるいはそれらの関数をコードの別のセクションに保存するだけですか?Clojureで不完全な関数を識別する
答えて
理論的には、関数が副作用を生成するかどうかを特定する方法はありません(Riceの定理のため)。したがって、純関数と不完全関数を区別することはおそらく不可能です。もちろん、構文レベルで関数が間違っているかどうかをチェックする方法があるかもしれませんが、実際にはこれが実際に助けになるかどうかは疑問です。
ファンクション名をbang(例:swap!
)で終了するには、かなり多くの共通機能がありますが、その機能はSTMトランザクションで使用するのに安全ではありません。これにはIOと多くのタイプの副作用が含まれているため、ここでは不純物と重複していますが、多くの不純な機能も完全に安全です。
スワップはSTMの一部であるため、「STM内で使用するには安全ではありません」と言い換えてください;-)それは完全に安全です。 –
@ArthurUlfeldtこの文言は、すでにライブラリコーディング標準のフレーズと非常によく似ています。「STMトランザクションで安全でないものにのみ使用!」だから私はそれをどのように改善できるかはわかりません。 –
'dosync'ブロックの中から' swap! 'を使うのを避けるのは、安全ではないと思っているからです。私たちはこのような噂を開始するこのようなサイトに声明を残すことに注意する必要があります。 STMの内部で使用するのが実際には危険な例を選択することができますが、これは名前が終わるすべての関数では当てはまりません。 –
- 1. 不完全ガンマ関数アルゴリズム
- 2. バベルトランス不完全不完全?
- 3. pythonの不完全なガンマ関数ですか?
- 4. Clojureで完全な言葉で(負ではない)整数を出力する関数を書く
- 5. 不完全なスキーマ
- 6. THREE.jsで不完全な影
- 7. R - ログ不完全ガンマ関数の導関数
- 8. 不完全な出力変数
- 9. 不完全なデータへの複数インデクサーアクセス
- 10. PATH変数が不完全です
- 11. Rでは、複雑な入力を伴う不完全ガンマ関数ですか?
- 12. UITableView numberOfRowsInSection - 完全な/不完全なタスクを表示
- 13. 不完全なフォームプロンプト - Android
- 14. 不完全な型のC++
- 15. 不完全な型::マップ
- 16. 不完全なファイルコピーJava NIO
- 17. エラー:不完全なテンプレートタイプ
- 18. 不完全なノードHTTP.Response
- 19. automapper不完全なドキュメント
- 20. クランテンプレート不完全な型
- 21. Sprintの不完全なストーリー
- 22. Python ValueError:不完全なフォーマット
- 23. エラー:不完全なSQL:LS
- 24. Seleniumの不完全なスクリーンショット
- 25. 不完全な結果
- 26. 不完全なJson - Behance API
- 27. 不完全な型C++
- 28. 不完全なUIBezierPathストローク
- 29. 可視不完全なUITableViewRowAnimation
- 30. 不完全なLaravelページビュー
実際にはありません。とにかく、あなたは "不純な機能"をどのように定義しますか? ['memoize'](https://clojuredocs.org/clojure.core/memoize)は不純ですか? 'memoize'によって返される関数はどうでしょうか?または、内部的に[transients](http://clojure.org/reference/transients)を使用する参照性の高い関数ですか? –
Clojureは、たとえばHaskellのような純粋なFP言語ではありません。これがあなたにとって重要なのであれば、Clojureは正しい選択ではありません。 –
@MichielBorkent:純粋であることは私には重要ではない、私はちょうど誰かが純粋なセクションと不純なセクションを分けることができれば面白いと思った。 – RFVenter