問題タブ [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.
haskell - 例外をキャッチすることは非純粋ですが、例外をスローすることは純粋であるのはなぜですか?
Haskell では、純粋に機能的なコードから例外をスローできますが、IO コードでしかキャッチできません。
- なんで?
- 他のコンテキストまたは IO モナドのみでキャッチできますか?
- 他の純粋関数型言語はそれをどのように処理しますか?
functional-programming - 関数型プログラミング スタイルでこのディープ コピーを実装する方法は?
次の構造があるとします。
ディープ コピー操作は、次のように定義できます。
私の質問は、関数型プログラミングスタイルでcopy(Node n, Map isom)
引数を変更しないように関数を設計する方法です。isom
c++ - void* パラメータを持つ純粋仮想関数を定義する抽象基本クラス。パラメータに一致する派生クラスは、何らかの型へのポインタです
私が作業している改訂された実際の基本クラスと派生クラスに加えて、それをインスタンス化し、非仮想関数呼び出しを使用する関数
ShaderClass.h
ShaderClass.cpp
LightMapShaderClass.h
LightMapShaderClass.cpp
基底クラスを使用する関数
functional-programming - 純粋な関数型言語では、データ (strings、ints、floats..) も単なる関数ですか?
Ruby のような純粋なオブジェクト指向言語について考えていました。Ruby では、数値、int、浮動小数点数、文字列など、すべてがそれ自体がオブジェクトです。これは純粋な関数型言語でも同じことですか? たとえば、Haskell では Numbers と Strings も機能しますか?
Haskell は、データや操作を含むすべてを関数として表すラムダ計算に基づいていることを知っています。「純粋な関数型言語」がすべてを関数としてモデル化し、関数がほとんどの場合同じ入力で同じ出力を返し、状態を持たないという定義を維持することは、私には論理的に思えます。
logging - 関数型プログラミング パラダイム内からのログ記録
私はできるだけ機能的なパラダイムに固執することを好み、脳がチャレンジに向けて準備を整えているときは、純粋に機能的なパラダイムにできるだけ近づけることを好みます。可能な限り F# を使用します。通常、私は VB.NET か C# (運が悪い場合は VBA) のどちらかで行き詰っています。そのため、私の言語では、関数型のアプローチからかなり離れることを許されています。
歴史的に、私は結果が得られるまで、ログ記録とユーザーとの通信を無視してきました。ユーザーを待つだけです。現在、ログやステータス バーの更新を実装しようとしています。私の言語ではいつでも標準出力に書き込むことができるので、簡単です。しかし、純粋に機能的な観点から、機能の内部で何が起こっているかについての情報を外の世界に漏らすにはどうすればよいでしょうか? 計算中にログを記録したり、ユーザーと通信したりすることは、純粋に機能的なアプローチに反するだけですか?
Haskell では、Monad を使用すると確信しています。他の言語を使用する場合はどうなりますか?
ありがとう。
c++ - SideffectsのC++コンパイル時チェック
一部のコンパイラはpureとconstをサポートしていますが、これらのアサーションが保持されていることを確認するためのオファーはありますか?例えば:
methods - グローバル状態を変更するメソッドの専門用語?
グローバル状態を変更するメソッドの標準的な技術用語はありますか?
- 「Unpure」 は厳しすぎます。なぜなら、 unpure メソッド
println("I don't consider stdout to be part of the global state")
およびdate()
はグローバルな状態を変更しないからです。 - 「Mutator メソッド」は近いですが、「セッター」の同義語であることが多いため、1 つの変数のみを変更したり、ローカル変数のみを変更してグローバルな状態を変更したりしない場合があります。
- " const メソッド" は C++ のみに使用されているようで、厳密すぎる技術的な詳細を暗示しています (たとえば、メソッドは非 const メソッドを呼び出さない可能性があります)。
- 「変異法」は私には良さそうに聞こえますが、目的 c でのみ使用される用語のようです。
更新: global stateとは、他のメソッドまたは同じメソッドの他の呼び出しから見えるメモリを意味します。
stdout はプログラムのどのメソッドでも読み取ることができないためprintln("I don't consider stdout to be part of the global state")
、印刷の副作用がありますが、グローバル状態は変更されません。
string - Haskell FFI to C++ で純粋な文字列から文字列への関数を作成する方法
私は Haskell FFI を介して C++ で関数を実装したいと考えてい String -> String
ます。たとえば、次の関数を C++ でまったく同じシグネチャで再実装することは可能ですか?
特に、この単純なタスクに不純物 (IO モナドを意味します) を導入することは論理的に不要であるため、戻り値の型に IO を持たないようにしたかったのです。これまでに見た C 文字列を含むすべての例では、純粋な に戻すことができない IO something または Ptr を返しString
ます。
私がこれをやりたい理由は、マーシャリングがFFIで面倒だという印象を持っているからです。上記の最も単純なケース (int などのプリミティブ型以外) を修正できれば、C++ 側で必要なデータ解析を行うことができます。これは簡単なはずです。
解析のコストは、文字列との間のマーシャリングの間に実行したい計算と比較してごくわずかです。
前もって感謝します。
f# - WebExceptions を適切に処理しますか?
インターネットから Web ページを取得する次の F# プログラムがあります。
これは、URI が有効で、マシンがインターネットに接続されていて、Web サーバーが適切に応答するなどの場合に正常に機能します。理想的な関数型プログラミングの世界では、関数の結果は、引数として渡されない外部変数 (副作用) に依存しません。
私が知りたいのは、関数が回復可能な外部エラーを処理する必要がある操作を処理するための適切な F# 設計パターンは何かということです。たとえば、Web サイトがダウンしている場合は、5 分間待ってから再試行することをお勧めします。再試行回数や再試行間の遅延などのパラメーターを明示的に渡す必要がありますか、またはこれらの変数を関数に埋め込んでも問題ありませんか?