問題タブ [function-composition]
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 - タプルと関数の合成
(\(a, b) -> a < b)
関数合成で表現するより良い方法はありますか? 私は何かが欠けているように感じ、実験はcurry
私をさらに混乱させるだけです.
python - 関数合成 VS 別の関数に作用する関数
私は、すべて同じ署名を持つ再利用可能な関数を多数持っています (それらは a を取り、 arecord
を返しますfloat
)。関数を新しい関数に結合する必要があることがよくあります。
record
を受け取り、それに適用f
し、結果が負の場合はそれをゼロに変換する関数を作成したいとしましょう。それを行うには、構成と関数の変更の 2 つの方法があります。各アプローチの長所と短所は何ですか?
構成:
変形:
python - Python でのポイントフリー関数の組み合わせ
私はいくつかの述語を持っています、例えば:
次のようにそれらを論理的に結合したい:
問題は次のとおりです。このような組み合わせは、次のような無意味なスタイルで記述できますか?
もちろん、ラムダ関数の真偽値はTrue
andand
とor
短絡演算子であるため、これは望ましい効果をもたらしません。私が思いついた最も近いものは、メソッドを実装して持つ単純P
な述語コンテナーであるクラスを定義し、述語を結合することでした。の定義は次のとおりです。__call__()
and_()
or_()
P
P
次のような述語の組み合わせである新しい述語を作成できるようになりました。
これは上記のラムダ関数と同等です。これは私が望んでいるものに近づきますが、無意味でもありません (ポイントは、引数ではなく述語そのものになりました)。2番目の質問は次のとおりですP
。(ラムダ)関数を使用せずにクラスのようなクラスを使用するよりも、Pythonで述語を結合するためのより良いまたはより短い方法(おそらく括弧とドットなし)はありますか?
haskell - Haskell Rewrite ルールと関数構成
haskell が関数合成のテクニックと長さに応じて複数の書き換え規則を必要とするのはなぜですか? これを回避する方法はありますか?
たとえば、次のコードがあるとします...
これは
ただし、ルールを追加する必要があります
と
次のルールを残します
ただし、これらをつなぎ合わせたり、他の形式の構成を使用したりすると、ルールは起動しません。
どうしてこれなの?考えられる実装ごとに書き換えルールを作成する必要がありますか?
haskell - runST と関数合成
このタイプチェックを行う理由:
以下はそうではありませんが:
GHCI は次のように訴えています。
haskell - 可変長構成関数?
可変関数合成関数を書こうとしています。これは基本的に(.)
、2 番目の引数関数が可変長であることを除いてです。これにより、次のような式が可能になります。
あるいは単に
IncoherentInstances
現在、最初の引数関数に非多態性のインスタンスを追加して必要とする場合、私が到達したものは機能します。
何か案は?それは可能ですか?
performance - Haskell:異なる機能構成とのパフォーマンスの違いは?
次のコード:
関数ghc.exe -O3
の定義を次のように置き換えると、高速になります(コンパイルオプション:)。average
これの理由は何でしょうか?この2行の違いは基本的に構文だと思いました。2番目のバージョン(自由変数なしvalues
)は、コンパイラーが最適化するのが簡単ですか?
おかしなことに、最適化せずにコンパイルすると、バージョンIが高速になります。
タイミング結果:
オプション:-O3
バージョンI:0.280秒バージョンII:0.212秒
オプション:(最適化なし)
バージョンI:0.42秒バージョンII:0.44秒
time
Cygwinのシェルコマンドを使用して測定。
type = Doubleのタイミング結果:
ダブル:
オプション:-O3
バージョンI:0.22秒バージョンII ::0.212秒
オプション:(最適化なし)
バージョンI:0.34秒バージョンII:0.35秒
詳細:コンパイラを使用しています
function - 関数を返す Haskell 関数を作成するにはどうすればよいですか?
a
、b
、 の3 つの Haskell 関数を作成したいと思いますc
。
各関数には 1 つの引数があります。引数は、3 つの関数の 1 つです。
a
関数にこの動作をさせたい:
- 引数が function の場合、 function
a
を返しますa
。 - 引数が関数 b の場合は、 function を返します
b
。 - 引数が関数 c の場合、関数を返します
a
。
関数に必要な動作の要約を次に示しますa
。
そして、他の2つの機能に私が望む動作は次のとおりです。
作成したら、さまざまな方法で関数を構成できるようにしたいと思います。たとえば、次のようになります。
これらの関数を作成するにはどうすればよいですか?
haskell - 関数 a → b を「モナディック」関数 a → mb として使用する
私は現在、Haskellの基本をいじっていて、次の「ユースケース」に出くわしました:
したがって、ここでは基本的にモナド関数と純粋な関数を混合し、それらをモナド関数に構成しています。これはうまくreturn . (*10)
いきますが、 は一般的に必要なもののように思えますmonadify = (return.)
。
その前に、そのような状況に対処するヘルパーがすでに存在するかどうかを尋ねたいと思います. もちろん、私は全体について混乱する可能性もあり、これを行うべきではない理由もあります. もしそうなら、教えてください。
clojure - Clojureで1つの引数の関数を複数の引数の関数に結合する
Clojureには、いくつかの1つの引数関数を組み合わせてベクトルを受け入れる新しい関数にするイディオムがあるのではないかと思います。新しい関数は、最初の関数を最初の引数に適用する必要があります。
これは多くの状況で役立つと思います。たとえば、より単純な1次元関数を使用して、点のx、y、z座標を変換したい場合があります。
私は次のように自分で実装しますが、標準のAPIに似たようなものがすでに存在しているはずです。