問題タブ [pointfree]
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.
f# - ポイントフリー関数での例外処理
一見些細な問題で立ち往生しています。ポイントフリーの方法で記述されている場合、関数で例外を処理できません。
次の2つの機能を検討してください。
どちらの関数も一見同じように見えますが、タイプが異なります。
明らかに、divide2
例外を処理しようとさえしません。単に演算子を返します。
divide2
例外を適切な方法で処理するために何ができますか(特にその引数を宣言することを除く)?
haskell - 1つの入力に2つの関数を適用するためのポイントフリー(またはライブラリ)関数
次のようなラムダ式を再利用し続けます
ここで、同じ入力を2つの関数に適用し、結果をペアでカプセル化します。これをキャプチャする関数を書くことができます
これで、上記のラムダ式はちょうどcombine f g
です。2つの質問があります。
- 私が見つけられない、これを行う標準ライブラリ関数があるかどうか知りたいです。
- 好奇心から、この関数をポイントフリー形式で書き直したいのですが、大変困っています。
performance - ポイントフリー版は性能が落ちる
さて、プログラム コードでこの関数を定義したことがわかりました。
それはそれがするように見えることをします。Stream a
type の内部演算子を使用して、リストのような型であるtype の 2 つの要素を圧縮します (演算子を数回適用します、はい) a
。定義は非常に簡単です。
この方法で関数を定義したら、次の別のバージョンを試しました。
私の知る限り、これは上記とまったく同じ定義です。これは、以前の定義の無意味なバージョンにすぎません。
ただし、パフォーマンスの変化があるかどうかを確認したかったのですが、実際、ポイントフリー バージョンではプログラムの実行がわずかに悪化することがわかりました (メモリと時間の両方で)。
なぜこうなった?必要に応じて、この動作を再現するテスト プログラムを作成できます。
それが違いを生むかどうかをコンパイルし-O2
ています。
単純なテスト ケース
上記の動作を再現しようとして、次のコードを書きました。今回はリストを使用しましたが、パフォーマンスの変化は目立たなくなりましたが、まだ存在しています。これはコードです:
opEvery
(明示的な引数のバージョン)を使用したプロファイリング結果:
opEvery'
(ポイントフリーバージョン)を使用したプロファイリング結果:
ただし、両方のバージョンが (あらゆる意味で) 同等であることを期待していました。
haskell - Haskell: ((.).(.)) fg が f と等しいのはなぜですか。gx?
((.).(.))という表現の意味を教えてください。私の知る限り、(.) の型は (b -> c) -> (a -> b) -> a -> c です。
haskell - Haskell では、マップ関数にリストを渡すだけの場合、マップ関数は何を意味しますか?
私がデバッグするように与えられた Haskell プロジェクトでは、map
1 つのパラメーター (リスト) のみで使用されるコード内のインスタンスが渡されます。
例えば
と
map
この文脈で何を意味するか/何をするか?
haskell - 「(。)。(。)」はどうすればわかりますか?
ファンクターについては理解fmap . fmap
していると思いますが、機能に関しては、何ヶ月も頭を痛めています。
の定義をに適用できることは(.)
わかり(.) . (.)
ましたが、その方法を忘れてしまいました。
自分で試してみると、いつも間違っていることがわかります。
「定義を適用するだけ」がそれを行う唯一の方法である場合、誰かがどのように思いついたの(.) . (.)
ですか?
私が欠けているより深い理解や直感があるに違いありません。
haskell - 説明してください (forM_ [stdout, stderr] . flip hPutStrLn) :: String -> IO ()
この Haskell 式がどのように機能するかを理解するのに苦労しています:
その部分は正確に何をしているの. flip hPutStrLn
ですか?型シグネチャは複雑に見えます:
(.)
式が評価されると、演算子の左右のオペランドは何になりますか?
私の質問をする別の方法は、上部の式の左側の部分が次のような型シグネチャになる方法です。
haskell - Haskell のポイントフリー関数
このポイントフリーをどのように定義しますか?
これは期待どおりに機能します。最も論理的なのは、次のようにドロップするだけのm
ようです。
ghciで定義するように動作しますが、それを呼び出すとargmax [1,3,4,5,6,1]
私に与えられます
私はそれがタイプに関係していると思います:
ポイントバージョンの場合:
ポイントフリー版の場合:
これは ghci の不気味さですか、それとも何か間違ったことをしていますか?