問題タブ [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.

0 投票する
5 に答える
424 参照

java - 静的メソッドが純粋に機能するかどうかを判断する

オブジェクトが与えられたjava.lang.reflect.Method場合、メソッドが純粋に機能するかどうかを判断する方法はありますか (つまり、同じ入力が与えられた場合、常に同じ出力を生成し、ステートレスです。つまり、関数は環境に依存しません)。

0 投票する
1 に答える
104 参照

function - フォボスの純度が下がる

なぜstd.algorithm.reduceフォボスは純粋ではないのですか? それは未修正の問題ですか、それとも修正できない理由がありますか?

これは、DConf 2013 の最終講義で Andrei が尋ねた「純粋な関数はどのように見えるか」という質問 と関係がありますか?

参照: http://forum.dlang.orgthread/20120306224101.GA30389@quickfur.ath.cx

sparseness次のコードの関数を純粋にしたい。reduce今のところ、いつでもforeachループに置き換えることができると思いますよね?

アップデート:

isIterable上記の代わりにandを使用することにしました。foreachこれは今のところ私にもうまく機能し、@safe pure nothrow. この問題を解決するために高階関数を使用する必要は今のところありません。また、Davids Simchas の今後のstd.rational使用が非常に自然であることがわかりました。

0 投票する
2 に答える
378 参照

scala - ビッグ スケーラブル アプリケーションに Scala が適している理由

Functional Programming Principles in Scala | Coursera Scalaのコースを受講しています。immutabilityso many functionsおよびが実際のアプリケーションにso much dependencies on recursionどのように適しているかを理解できません。Scala

つまり、私が実行しているすべてのものの複数のコピーを使用して、またはキックインimperative languagesするリスクがあることを意味しますStackOverflowGarbage CollectionOut Of Memory

ここで何が欠けていますか?

0 投票する
1 に答える
227 参照

haskell - Haskellで状態変更を転送するのに適したラッパーは何ですか?

私自身の興味のために、単純な FRP バックエンドを実装しようとしています。

純粋な関数を使用することにしました。そのため、コアに IO はありません。実装は信号変換器に基づいています。

私はすでに2つの方法を試しました:

https://gist.github.com/Heimdell/9675964#file-streamer-hs-L1

https://gist.github.com/Heimdell/9675964#file-behaviour-hs-L1 (名前が間違っています、ごめんなさい)

fold/integrate :: (a -> b -> b) -> b -> SF a bどちらの方法でも、信号統合用のコンビネータを作成できます。

どちらの方法にも問題があります。有効な ArrowApply/Monad インスタンスを作成することは不可能のようです。

  • ストリームの方法:ペアのリストがあります。(arrow, x)つまり、unzipリストのペアです(arrows, xs)

    • map headそれらの結果を望むならzipWith ($)、キャリー・アロング・アロー・ミューテーションを失います。
    • head arrowslistenを作成するxsと、最初に取られた矢印の状態がフリーズします。
  • 明示的なステートウェイ:

    ここで、return にどうにか有効に注入する必要がありますがbf1appこれは不可能です (実際に by を注入すると(const bf1 *** id)、他の実装の 2 番目のものと同様の無効な動作が生成されます。

SFArrowApply インスタンスを許可する方法はありますか?

PS: ブランチが長期間使用されていない場合、ストリームウェイの ArrowChoice でメモリ リークが発生します。今のところ、それを修正することはできません。漏れのないバージョンを作成することは可能ですか?

PPS: 時間が必要な場合は、入力で圧縮できます。

0 投票する
1 に答える
381 参照

haskell - Haskell 関数を無点表現に変換する

関数のリストを受け取り、リストされた各関数に単一の引数を適用し、別の関数を介してリストを圧縮するポイントフリー関数を作成したいと考えています。この関数の無意味なバージョンには、次の型シグネチャがあります。

multiplex :: ([a] -> b) -> [(c -> a)] -> (c -> b)

そして使用例:

以下のように書くことができました。

この実装はポイントフリーではありません。この関数をポイントフリー表現に変換するにはどうすればよいですか?

0 投票する
3 に答える
114 参照

functional-programming - (現在の秒数) を複数回保存する必要がある場合に可変状態を回避する

次の基本的なストップウォッチを Racket にまとめました (現在学習中ですが、最終的な目的はポモドーロ タイマーです)。

これは本来あるべきことを正確に行いますが、可変状態を回避するにはどうすればよいか疑問に思っていました。私が HTDP に従っている場合、これはミュータブルな状態が正当化されるような状況ですが、Wadler の「関数型プログラミングのためのモナド」を閲覧した後でも、set!.

機能させるには、関数に引数を追加する必要があることを知っています。たとえばstart

同様のアプローチが と で機能する可能性がlapありstopます。

それでも、機能を復元するために追加の引数を追加した後、変数に値を格納するのではなく、引数も渡す必要があることはわかっていますが、この場合、これを活用して回避する方法もわかりませんset!

更新:以下の3つの回答はすべて非常に価値があるため(ありがとうございます!)、一意の正解としてマークしませんでした. 以下は、私の最初の質問に対する最小限の解決策です。これは、@Metaxal のループ提案と @Greg Hendershott の使用例を組み合わせたものです。

0 投票する
1 に答える
616 参照

functional-programming - 純粋に機能的なラケット

状態を変更するすべての Racket プロシージャは何ですか? できるだけ副作用の少ないプログラムを作ろうとしている

だから、私は次のようなことをします:

セット以外に何を除外する必要がありますか。? すべての不純な関数の完全なリストはどこかにありますか?

ああ、プログラムは #lang racket/gui も使用しています (これは、私が収集した限りではほとんど不純です)。だからややこしいかも…

ありがとうございました。