problème de composition filtre / Carte Haskell
-
22-09-2019 - |
Question
On m'a donné cette question dans un tutoriel, et je ne sais vraiment pas comment s'y prendre.
Comment doit g et h définir en termes de p et f afin de faire en sorte que
filter p . map f = map g . filter h
détient toujours?
Les pointeurs dans la bonne direction serait grandement apprécié.
La solution
Il est clair que f :: a -> b
et p :: b -> Bool
. Puisque nous ne pouvons pas faire d'autres hypothèses sur f
et g
, on devra définir
h = p . f
g = f
h :: a -> Bool
et g :: a -> b
.
Autres conseils
Pensez à des types.
f :: a -> b
g :: a -> b
p :: b -> Bool
h :: a -> Bool
Une autre façon de voir ceci:
map g (filter h A)
est le {g(a) : with h(a) is true and a is elt from A}
de consigne
filter p (map f A)
est le {f(a) : with p(f(a) is true and a is elt from A}
de consigne
Pour ces ensembles soient égaux, nous devons choisir f = g
et h(a) = p(f(a))
.