0

通常どのように呼ばれているのかわかりませんが、必要なのは次のようなものです。

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 つの場合のみです。

4

3 に答える 3

8

独自の関数を定義できます。

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)]
于 2012-09-15T11:06:48.477 に答える
2

一般に、いいえ - タプルはリストほど一般的ではなく、異なるデータ型を持つ可能性があるため

ただし、((a,b), c) の方法でタプルを作り直すことができ、計算を一般化するために fst/snd の組み合わせまたは矢印のいずれかを使用することができます。

于 2012-09-15T11:01:06.350 に答える
0

この問題の一般的な解決策はわかりませんが、実際的な解決策は

uncurry3 f (x, y, z)  =  f x y z

それで

map (uncurry3 f) [(1,2,3), (4,5,6), (7,8,9)]
于 2012-09-15T11:02:32.637 に答える