2

次のように定義された、1つの引数をとる関数 a と、可能な入力を含むリスト b があるとします。

let a x1 = x1 == 3
let b = [3, 3]

ここで、b のすべての値が a の引数として True を返すことをテストしたいと思います。これは、all 関数で実行できます。

all a b
> True

ただし、a が 2 つの引数を取り、b がタプルの各値が各引数に対応するタプルのリストである場合、同様のことができますか?

例えば:

let a x1 x2 = x1 == 3 && x2 == 1
let b = [(3,1), (3,1)]
all a b

これは以下を返します:

<interactive>:1:4:
    Couldn't match expected type `Bool'
           against inferred type `a1 -> Bool'
    In the first argument of `all', namely `a'
    In the expression: all a b
    In the definition of `it': it = all a b

これを行う方法についてのアイデアはありますか?

4

1 に答える 1

11

2 つの引数を持つ関数を 1 つのペアを期待する関数に変換するには、次を使用します。

uncurry :: (r -> s -> t) -> (r, s) -> t

では、どうでしょうか

all (uncurry a) b

?

于 2012-11-06T19:42:58.487 に答える