問題タブ [referential-transparency]
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.
functional-programming - 参照透過性とは何ですか?
参照透過性という用語はどういう意味ですか?「equalsをequalsに置き換えることができる」と説明されていると聞きましたが、これは不十分な説明のようです。
variables - Haskellには変数がありますか?
Haskellには変数がないという主張をよく耳にします。特に、この回答はそうではないと主張しており、少なくとも9回賛成され、受け入れられました。
それで、それは変数を持っているかどうか、そしてなぜですか?
この質問は、ML、F#、OCaml、Erlang、Oz、Lava、およびすべてのSSA中間言語にも当てはまるようです。
data-structures - Haskell Edison APIとCoreをF#に移植することに何か利点はありますか?
Edison APIおよびコアモジュールは、純粋に機能的なデータ構造のHaskell実装です。
F#とネイティブの.Netデータ構造は、Edison APIとCoreのユースケースを十分にカバーしていますか?
APIとCOREHaskellモジュールをF#に移植しようとすることに何か利点はありますか?
haskell - Haskellでの乱数のサンプリングシーケンス
シミュレーションにはガウス乱数の小さなリストが必要なので、次のことを試しました。
これは単なるボックスミュラーアルゴリズムです。[0,1]間隔でr1、r2の一様乱数が与えられると、ガウス乱数を返します。
normals
そのため、乱数のリストが必要になるたびにこの関数を使用しました。
それに関する問題は明白でなければなりません:それは私が常に同じシードを使用しているので、常に同じシーケンスを生成します!新しいシーケンスを取得していません。常にシーケンスの最初のn個の値のみを取得しています。
私がはっきりとふりをしていたのは、次のように入力したときです。
xをこのリストの最初の10個の値にmap (boxMuller 0 1) $ pairs $ randoms g
し、yを次の50個の値にします。
もちろん、これは不可能です。関数は、同じ入力が与えられた場合、常に同じ値を返す必要があるためです。この罠から逃れるにはどうすればよいですか?
algorithm - Haskell を使用して、グリッド上の 2 点間の最短経路を見つける
これは、非機能的な方法で簡単に解決できる問題です。
しかし、Haskell でそれを解決すると、大きな問題が発生します。関数型プログラミングに関しては、私が未経験であることは確かに理由です。
問題:
同じサイズの長方形に分割された 2D フィールドがあります。シンプルなグリッド。一部の長方形は空のスペース (通過可能) ですが、他の長方形は通過できません。開始長方形Aと宛先長方形Bが与えられた場合、2 つの間の最短経路をどのように計算しますか? 移動は垂直方向と水平方向にのみ可能で、ステップは 1 つの長方形を大きくします。
Haskellでこれを達成するにはどうすればよいですか? コード スニペットは確かに歓迎されますが、必須ではありません。また、その他のリソースへのリンクも大歓迎です。
ありがとう!
haskell - 純粋に機能的なスキームやLispはありますか?
私はいくつかの関数型プログラミング言語で遊んだことがあり、Lisps(特にScheme)で使用されるs-expr構文を本当に楽しんでいます。
また、純粋に関数型言語で作業することの利点もわかります。したがって:
純粋関数型スキーム(または一般的なLisp)はありますか?
haskell - Haskellは本当に純粋ですか(システム外の入出力を扱う言語はありますか)?
関数型プログラミングに関してモナドに触れた後、この機能は実際に言語を純粋にしますか、それとも黒板の数学以外の現実世界のコンピューターシステムを推論するための単なる「脱獄カード」ですか?
編集:
これは誰かがこの投稿で言ったような炎の餌ではありませんが、誰かが私を撃墜して、証拠と言うことができることを私が望んでいる本物の質問です、それは純粋です。
また、他のそれほど純粋ではない関数型言語や、優れた設計を使用するいくつかのオブジェクト指向言語に関する質問を検討し、純粋性を比較しています。これまでのところ、私の非常に限られたFPの世界では、モナドの純度をまだ高めていません。しかし、純度の問題ではるかに重要な不変性のアイデアが好きです。
haskell - Haskellは本当にunsafePerformIOを考慮した純粋な関数型言語ですか?
Haskellは一般的に、純粋に関数型言語の例として参照されます。の存在を考えると、これをどのように正当化できSystem.IO.Unsafe.unsafePerformIO
ますか?
編集:「純粋関数型」とは、プログラムの機能部分に不純なコードを導入することは不可能であることを意味していると思いました。
oop - OOP の「参照透過性」に相当するものを何と呼びますか?
私の理解では、「参照透過性」という用語は、実際には機能コードにのみ適用できます。ただし、オブジェクト指向コードのオブジェクトに対するメソッド呼び出しは、メソッドの戻り値であり、メソッド呼び出し後のオブジェクトの状態は、呼び出し前のオブジェクトの状態のみに依存するという同様のプロパティを持つことができます。 、およびメソッドの引数。
つまり、機能的な参照透過性:
オブジェクト指向「参照透過性」:
この物件に名前はありますか?
の呼び出し中にの状態がobj
変化しない場合、関数のオーバーロードがサポートされている場合、「オブジェクト指向」スタイルは次のように書き直すことができるためfoo()
、関数形式と同等です。
ただし、メソッド呼び出しで状態が変化することはかなり一般的であるため、obj
これが分析に役立つかどうかはわかりません...
functional-programming - 参照透過性を理解する
一般的に、私の推論に何か問題があるため、頭痛がします。
1 セットの引数の場合、参照透過関数は常に 1 セットの出力値を返します。
つまり、そのような関数は真理値表 (1 セットの引数に対して 1 セットの出力パラメーターが指定されているテーブル) として表すことができます。
そのような関数の背後にあるロジックは(順次ではなく) 組み合わせになります。
つまり、純粋な関数型言語 (rt 関数のみを持つ) では、組み合わせロジックのみを記述できます。
最後のステートメントはこの推論から導き出されたものですが、明らかに誤りです。つまり、推論に誤りがあるということです。[質問: この推論のどこに誤りがありますか?]
UPD2. 皆さん、面白いことをたくさん言っていますが、私の質問には答えていません。私は今それをより明確に定義しました。質問の定義をめちゃくちゃにしてすみません!