(\(a, b) -> a < b)
を関数式で表現する方が良いでしょうか?私は何かを見逃していると感じてcurry
と一緒に実験すると、もっと混乱してしまいます。タプルと関数の合成
6
A
答えて
12
curry
ここで使用するのは間違っています。タプル上で動作する関数をカルト関数に変換します。それはuncurry (<)
だ、この場合
uncurry :: (a -> b -> c) -> (a, b) -> c
:あなたはuncurry
で反対のことを、したいです。
(タプルへの書き込み機能で便利なコンビネータのための別の有用なソースはControl.Arrow
である;。(->)
はArrow
のインスタンスであることから、あなたはb -> c
としてa b c
を読むことができる)タイプを見ると
1
はにHaskellの中の最良の方法です任意の関数が何をするのか、最初のアイデアを得る:
curry :: ((a, b) -> c) -> a -> b -> c
uncurry :: (a -> b -> c) -> (a, b) -> c
curry
:ペア→カレー関数の機能(それcurries機能)。
uncurry
:カリング関数→ペアの機能。
Haskell Wiki page on curryingがページの端にある小さな演習を持っています
- 簡素化
curry id
- 簡素化
uncurry const
- エクスプレス
snd
curry
またはuncurry
およびその他の基本的なプレリュード機能を使用し、ラムダ- なしラムダとwiなしで関数
\(x,y) -> (y,x)
を書く唯一のプレリュード関数これらの練習問題を解決しようとすると、彼らはあなたにハスケル型システムと関数のアプリケーションへの大規模な洞察力を与えるでしょう。
uncurry
のいくつかの興味深い用途がありますが、以下の機能に異なる引数を渡すと、彼らが何をするか見てみ:
uncurry (.) :: (b -> c, a -> b) -> a -> c
uncurry (flip .) :: (b -> a -> b1 -> c, b) -> b1 -> a -> c
uncurry (flip (.)) :: (a -> b, b -> c) -> a -> c
uncurry ($) :: (b -> c, b) -> c
uncurry (flip ($)) :: (a, a -> c) -> c
-- uncurry (,) is an identity function for pairs
uncurry (,) :: (a, b) -> (a, b)
uncurry (,) (1,2) -- returns (1,2)
uncurry uncurry :: (a -> b -> c, (a, b)) -> c
uncurry uncurry ((+), (2, 3)) -- returns 5
-- curry . uncurry and uncurry . curry are identity functions
curry . uncurry :: (a -> b -> c) -> (a -> b -> c)
(curry . uncurry) (+) 2 3 -- returns 5
uncurry . curry :: ((a, b) -> c) -> ((a, b) -> c)
(uncurry . curry) fst (2,3) -- returns 2
-- pair -> triple
uncurry (,,) :: (a, b) -> c -> (a, b, c)
uncurry (,,) (1,2) 3 -- returns (1,2,3)
関連する問題
- 1. スカラ:通常の関数対タプル関数?
- 2. Tupled関数合成
- 3. グァバ関数合成
- 4. Java関数とコンシューマを合成する
- 5. ジェネリック関数合成ハスケル
- 6. 内部にモノイドと関数を持つタプルの適用インスタンス
- 7. 関数のパラメータとしてタプルを渡す方法
- 8. ドメインとタプルの関係計算
- 9. 合成可能なC++関数のデコレータ
- 10. 地図。 foldr関数合成 - Haskellの
- 11. タプル関係微分または関係代数構文検証?
- 12. グループの複数のフィールドと出力タプル
- 13. 合計タプル同じ値
- 14. なぜ関数のパラメータでタプルの規則?
- 15. タプルのリストをソートするためのPythonラムダ関数
- 16. 選択とテーブル値関数のOracleスカラー関数の結合
- 17. Scalaのタプルから関数を実行する
- 18. 再帰的タプル関数を持つHaskellの難点
- 19. C++ 11:テンプレート関数からのstd ::タプルを構築
- 20. タプル:タプルを変換する方法1つのキーと複数の値
- 21. 時限関数とユーザー起動関数の競合
- 22. unique_togetherの複数のタプル
- 23. テーブル値関数とMSSQLクエリの結合
- 24. GrailsアプリケーションとJavascript関数の統合
- 25. Javascript関数とフォーム名の競合
- 26. シーケンシングと純関数の結合
- 27. 合計タプルのリスト内の各値は、
- 28. Hadoop PIGタプルの最大数
- 29. Swiftのタプルとストラクチャ
- 30. リストを取得してタプルを返すHaskell関数