2

我在教程中被提出过这个问题,我真的不知道该怎么做。

必须如何根据 p 和 f 定义 g 和 h 以确保
filter p . map f = map g . filter h
始终成立?

任何指向正确方向的指针将不胜感激。

4

3 回答 3

9

很明显f :: a -> bp :: b -> Bool。由于我们无法对 和 做出任何其他假设fg因此必须定义

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 = gh(a) = p(f(a))

于 2012-11-26T17:38:36.367 回答