問題タブ [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.
java - 静的メソッドが純粋に機能するかどうかを判断する
オブジェクトが与えられたjava.lang.reflect.Method
場合、メソッドが純粋に機能するかどうかを判断する方法はありますか (つまり、同じ入力が与えられた場合、常に同じ出力を生成し、ステートレスです。つまり、関数は環境に依存しません)。
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
使用が非常に自然であることがわかりました。
scala - ビッグ スケーラブル アプリケーションに Scala が適している理由
Functional Programming Principles in Scala | Coursera
Scalaのコースを受講しています。immutability
、so many functions
およびが実際のアプリケーションにso much dependencies on recursion
どのように適しているかを理解できません。Scala
つまり、私が実行しているすべてのものの複数のコピーを使用して、またはキックインimperative languages
するリスクがあることを意味しますStackOverflow
Garbage Collection
Out Of Memory
ここで何が欠けていますか?
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 arrows
listenを作成するxs
と、最初に取られた矢印の状態がフリーズします。
明示的なステートウェイ:
ここで、return にどうにか有効に注入する必要がありますが
bf1
、app
これは不可能です (実際に by を注入すると(const bf1 *** id)
、他の実装の 2 番目のものと同様の無効な動作が生成されます。
SF
ArrowApply インスタンスを許可する方法はありますか?
PS: ブランチが長期間使用されていない場合、ストリームウェイの ArrowChoice でメモリ リークが発生します。今のところ、それを修正することはできません。漏れのないバージョンを作成することは可能ですか?
PPS: 時間が必要な場合は、入力で圧縮できます。
haskell - Haskell 関数を無点表現に変換する
関数のリストを受け取り、リストされた各関数に単一の引数を適用し、別の関数を介してリストを圧縮するポイントフリー関数を作成したいと考えています。この関数の無意味なバージョンには、次の型シグネチャがあります。
multiplex :: ([a] -> b) -> [(c -> a)] -> (c -> b)
そして使用例:
以下のように書くことができました。
この実装はポイントフリーではありません。この関数をポイントフリー表現に変換するにはどうすればよいですか?
functional-programming - (現在の秒数) を複数回保存する必要がある場合に可変状態を回避する
次の基本的なストップウォッチを Racket にまとめました (現在学習中ですが、最終的な目的はポモドーロ タイマーです)。
これは本来あるべきことを正確に行いますが、可変状態を回避するにはどうすればよいか疑問に思っていました。私が HTDP に従っている場合、これはミュータブルな状態が正当化されるような状況ですが、Wadler の「関数型プログラミングのためのモナド」を閲覧した後でも、set!
.
機能させるには、関数に引数を追加する必要があることを知っています。たとえばstart
、
同様のアプローチが と で機能する可能性がlap
ありstop
ます。
それでも、機能を復元するために追加の引数を追加した後、変数に値を格納するのではなく、引数も渡す必要があることはわかっていますが、この場合、これを活用して回避する方法もわかりませんset!
。
更新:以下の3つの回答はすべて非常に価値があるため(ありがとうございます!)、一意の正解としてマークしませんでした. 以下は、私の最初の質問に対する最小限の解決策です。これは、@Metaxal のループ提案と @Greg Hendershott の使用例を組み合わせたものです。
functional-programming - 純粋に機能的なラケット
状態を変更するすべての Racket プロシージャは何ですか? できるだけ副作用の少ないプログラムを作ろうとしている
だから、私は次のようなことをします:
セット以外に何を除外する必要がありますか。? すべての不純な関数の完全なリストはどこかにありますか?
ああ、プログラムは #lang racket/gui も使用しています (これは、私が収集した限りではほとんど不純です)。だからややこしいかも…
ありがとうございました。