関数型プログラミングで時間関数はどのように存在するのでしょうか? 質問する

関数型プログラミングで時間関数はどのように存在するのでしょうか? 質問する

正直に言うと、私は関数型プログラミングについてあまり詳しくありません。あちこちでそれについて読んで、関数型プログラミングでは、関数が何回呼び出されても、同じ入力に対して同じ出力を返すことを知りました。これは、関数式に含まれる入力パラメータの同じ値に対して同じ出力に評価される数学関数とまったく同じです。

たとえば、次のことを考えてみましょう。

f(x,y) = x*x + y; // It is a mathematical function

を何度使用してもf(10,4)、その値は常に になります104。したがって、 を書いた場所であればどこでもf(10,4)、式全体の値を変更することなく に置き換えることができます104。このプロパティは と呼ばれます。参照透明性表現の。

Wikipediaによると(リンク)、

逆に、関数コードでは、関数の出力値は関数に入力される引数のみに依存するため、引数 x に同じ値を指定して関数 f を 2 回呼び出すと、2 回とも同じ結果 f(x) が生成されます。

関数型プログラミングに時間関数(現在の時刻を返す)は存在できますか?

  • もしそうなら、それはどうやって存在するのでしょうか?関数型プログラミングの原則に違反していないでしょうか?特に、参照透明性これは関数型プログラミングの特性の 1 つです (私が正しく理解していれば)。

  • そうでない場合、関数型プログラミングで現在の時刻をどのように知ることができるでしょうか?

ベストアンサー1

はいといいえ。

関数型プログラミング言語によって解決方法は異なります。

Haskell(非常に純粋なもの)では、これらすべてのことは、I/O モナド- 見るここ

これは、関数 (ワールド ステート) に別の入力 (および出力) を取得するものと考えることもできますし、簡単に言えば、時間の変更を取得するなどの「不純さ」が発生する場所と考えることもできます。

F# などの他の言語には、ある程度の不純性が組み込まれているため、通常の命令型言語と同様に、同じ入力に対して異なる値を返す関数を作成できます。

ジェフリー・バーカがコメントで述べたように、I/Oモナドの素晴らしい紹介Haskell wiki から直接引用。

おすすめ記事