通常どのように呼ばれているのかわかりませんが、必要なのは次のようなものです。
f a b c = a + 2 * b + 3 * c
map f [(1,2,3), (4,5,6), (7,8,9)]
つまり、n 個のタプルのリストを、n 個の個別の引数を持つ関数にマッピングします。Haskellでこれを行う組み込みの方法はありますか?
PS:uncurry
たった今見つけましたが、引数が 3 つの場合はこのように動作しないようで、引数が 2 つの場合のみです。
独自の関数を定義できます。
uncurry3 :: (a -> b -> c -> d) -> (a,b,c) -> d
uncurry3 f (a,b,c) = f a b c
map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]
または、最大 15 のタプル サイズで機能するパッケージuncurryN
から使用することもできます。tuple
cabal install tuple
import Data.Tuple.Curry
map (uncurryN f) [(1,2,3), (4,5,6), (7,8,9)]
一般に、いいえ - タプルはリストほど一般的ではなく、異なるデータ型を持つ可能性があるため
ただし、((a,b), c) の方法でタプルを作り直すことができ、計算を一般化するために fst/snd の組み合わせまたは矢印のいずれかを使用することができます。
この問題の一般的な解決策はわかりませんが、実際的な解決策は
uncurry3 f (x, y, z) = f x y z
それで
map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]