过滤/映射组合问题Haskell

时间:2009-11-25 11:22:25

标签: haskell composition

我在教程中得到了这个问题,我真的不知道如何去做。

  

为了确保这一点,必须如何用p和f来定义g和h   filter p . map f = map g . filter h
  总是抱着?

任何指向正确方向的人都会非常感激。

3 个答案:

答案 0 :(得分:9)

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

h = p . f
g = f

现在h :: a -> Boolg :: a -> b

答案 1 :(得分:4)

考虑类型。

f :: a -> b
g :: a -> b
p :: b -> Bool
h :: a -> Bool

答案 2 :(得分: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))