2

チュートリアルでこの質問を受けましたが、どうすればよいかわかりません。


filter p . map f = map g . filter h
が常に成り立つようにするには、p と f に関して g と h をどのように定義する必要がありますか?

正しい方向へのポインタは大歓迎です。

4

3 に答える 3

9

f :: a -> bとであることは明らかですp :: b -> Boolfとについて他の仮定を立てることはできないため、次のgように定義する必要があります。

h = p . f
g = f

h :: a -> Boolg :: a -> b

于 2009-11-25T11:32:09.267 に答える
4

タイプについて考えてみましょう。

f :: a -> b
g :: a -> b
p :: b -> Bool
h :: a -> Bool
于 2009-11-25T11:36:34.080 に答える
2

これを確認する別の方法:

map g (filter h A)セットです{g(a) : with h(a) is true and a is elt from A}

filter p (map f A)セットです{f(a) : with p(f(a) is true and a is elt from A}

これらのセットを等しくするには、 と を選択する必要がありf = gますh(a) = p(f(a))

于 2012-11-26T17:38:36.367 に答える