2009-11-25 116 views
2

我已經在教程中給出了這個問題,我真的不知道如何去做。過濾器/地圖組合問題Haskell

必須如何G和H磷,氟進行定義,以確保
filter p . map f = map g . filter h
一貫主張?

任何指針在正確的方向將不勝感激。

回答

9

很明顯,f :: a -> bp :: b -> Bool。既然我們不能對fg任何其他假設,一個必須定義

h = p . f 
g = f 

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

4

想想類型。

f :: a -> b 
g :: a -> b 
p :: b -> Bool 
h :: a -> Bool 
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))