3

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

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

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

4

3 に答える 3

2

F# は OCaml に基づいており、OCaml と同様に純粋な FP ではありません。どちらの言語でも、あなたの目標を達成するために遠く離れているとは思いません。

于 2013-09-30T20:59:44.713 に答える
0

それを管理する1つの方法は、現実世界の概念を表す公称型を作成し、各非決定論的関数がそのシングルトンをパラメーターとして受け取るようにすることです。このようにして、依存するすべての関数はそれを行に沿って渡す必要があります。これにより、ある程度の規律と少し余分な入力を犠牲にして、2 つを明確に区別できます。このアプローチの良いところは、必要な条件が満たされている場合、コンパイラによって検証できることです。

于 2013-10-01T02:11:31.127 に答える