問題タブ [currying]
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.
scala - Scala - カリー化とデフォルト引数
部分的に適用してカリー化で使用しようとしている 2 つのパラメーター リストを持つ関数があります。2 番目のパラメーター リストには、すべて既定値を持つ (ただし、暗黙的ではない) 引数が含まれます。このようなもの:
これで、次はすべて問題ありません。
今私が定義した場合:
次に、次のことができます。
次のように、「部分的」で一部/すべての引数を省略できない理由を誰かが説明できますか:
「部分的」と書くことは、本質的に「test(1)」と同じように振る舞うべきではありませんか? 誰かがこれを達成する方法を見つけるのを手伝ってもらえますか?
助けてください、私は必死です!
編集- 24 時間以内に自分の質問に答えることができないため、ここに自分の回答を投稿します。
これは、これまでのところ自分でできる最善のことです。
このように動作します...
wolfram-mathematica - Mathematicaでカリー化
この構成を使用して、Mathematicaで限定された形式のカリー化を実装することができます。
たとえば、次のようにします。
問題があります:Attributes
最初の(セットの)引数にのみ適用されます。検討:
"8 / 4"
私の意図は、"3 + 5"
リストに戻ることでした。
その結果:
この構成に属性を拡張する方法はありますか?
これを達成するための別の便利な構成はありますか?
属性以外に、Mathematica内でカリー化を拡張する方法はありますか?
scala - カリー化機能のある奇妙なもの
私には理解できないこの奇妙な状況があります。「ProgramminginScala」の本、Ch。9.9。
私がカリー化された関数を持っているとしましょう:
特別なカーリー構文内で1つの引数を使用して呼び出すと、期待どおりに機能します。
ただし、2つのステートメントを入力すると、奇妙なことがわかります。
どうして「こんにちは!」「Before」の前に印刷され、次に「5」が内部に印刷されますか?私は夢中ですか?
javascript - 可変長カリー和関数
次のように機能するには、js sum 関数が必要です。
出来ないと聞きました。+
しかし、の前に追加すればsum
できると聞きました。のように+sum(1)(2)(3)(4)
。
これを行う方法のアイデアはありますか?
haskell - カリー化を利用するためのパラメーターの順序付け
flip
最近、ハッキングが発生したり発生したりするコードが多すぎたため、パラメーターの順序を変更するためにコードを 2 回リファクタリングしました\x -> foo bar x 42
。
関数シグネチャを設計するとき、カリー化を最大限に活用するのに役立つ原則は何ですか?
f# - 逆カレー?
特定の方法で関数を構成したいと思います。これらの 2 つの関数を疑似コードで検討してください (F# ではありません)。
私が F# でやりたいことは、それを理解することです。
コードlet F2 = F1 * 10
は F1: と同じ署名を与えval F2 : int -> int -> int
、呼び出しF2 2 3
は 50: (2 + 3) * 10 になります。それはかなり賢いでしょう...
何が起こるかはかなり異なります。最初の行は期待どおりです。
しかし、2 行目を追加すると、let F2 = F1 * 10
F# がスローされます。the type int does not match the type 'a -> 'b -> 'c
それはそれとそのF1を今訴えていrequires member ( + )
ます。
もちろん、次のように綴ることもできます。
しかし、今では C# を使ったほうがよかったかもしれません。タプルされた引数は、F# の優雅さの多くを壊します。また、私の実際の関数 F1 と F2 には 2 つだけよりも多くの引数があるため、これはまさに私が F# を使用して回避したかったことと同じです。次のように言うと、より自然になります。
私が(ほぼ)それを行う方法はありますか?
追加のクレジット: これらのエラー メッセージは正確にどうなっているのですか? let F2 = F1 * 10
2 行目で 1 行目の入力が変わるのはなぜですか?
ご意見ありがとうございます。
ゲルト・ヤン
update 説明されていることを (ほぼ) 実行する 2 つのアプローチ。
タプルを使用するもの。2 行目は少し風変わりに見えますが、問題なく動作します。小さな欠点は、現在カリー化を使用できないか、さらに風変わりなコードを追加する必要があることです。
別のアプローチは、レコードを使用することです。これはもう少し単純明快で、一見すると簡単に理解できますが、より多くのコードと式が必要になります。F# の優雅さの一部を取り除き、C# のように見えます。
haskell - HaskellでLispの適用を定義するにはどうすればよいですか?
この定義は、関数がカレーされるHaskellのような怠惰な言語で許可されるべきではありませんか?
これは基本的に、指定された関数を指定された引数のリストに適用する関数であり、たとえばLispで非常に簡単に実行できます。回避策はありますか?
haskell - タプル引数を使用した Haskell での関数合成
時々、次の形式の関数が 2 つあります。
そして、コンポジションgが必要です。h を h' に変更することでこれを解決します。
次のような関数 m を (可能であれば) 示してください。
または、そのような状況に対処する別の方法。ありがとう。
scala - Scalaで高次の型を「カリー化」することは可能ですか?
たとえば、2 つの型パラメーターを持つトレイトがあるとします。
より高次の型パラメーターを持つ別のトレイト、たとえば
の型パラメータの 1 つを固定値に置き換えて、パラメータ化にQux
使用できるようにしたいと考えていますTurkle
。
以下に例を示します (Scala では意味をなさないコードの例です!):
この効果を達成する方法はありますか?