6 votes

Est-ce que j'utilise un bon raisonnement équationnel sur une définition de filtre en termes de foldr ?

Voici la définition de la fonction de filtrage en utilisant foldr :

myFilter p xs = foldr step [] xs
    where step x ys | p x       = x : ys
                    | otherwise = ys

Donc, par exemple, disons que j'ai cette fonction :

myFilter odd [1,2,3,4]

il en sera ainsi :

foldr step [] [1,2,3,4]

et ce sera

step 1 (foldr step [] [2,3,4])

et ce sera

step 1 (step 2 (foldr step [] [3,4]))

et ce sera

step 1 (step 2 (step 3 (foldr step [] [4])))

et ce sera

step 1 (step 2 (step 3 (step 4 (foldr step [] []))))

et foldr step [] [] es [] donc :

step 1 (step 2 (step 3 (step 4 [])))

Nous allons maintenant entrer dans le step fonction.
voici la définition de step à l'intérieur de la myFilter fonction, depuis le haut :

step x ys | p x       = x : ys
          | otherwise = ys

Aussi, je vous rappelle que p est en fait le odd dans notre exemple.

Eh bien, encore une fois, nous sommes ici :

step 1 (step 2 (step 3 (step 4 [])))

et

x = 4 au plus profond step et 4 n'est pas impair, donc nous retournons ys qui est []

donc maintenant on a ça :

step 1 (step 2 (step 3 []))

maintenant, au plus profond step , x = 3 et 3 est impair, donc nous retournons x:ys qui est 3 : [] qui est [3] et maintenant nous avons :

step 1 (step 2 [3])

et maintenant, dans l'intérieur step , x = 2 et 2 n'est pas impair, donc nous retournons ys qui est [3] donc maintenant nous aurons :

step 1 [3]

et maintenant, x = 1 et 1 est impair, donc nous retournons x : ys qui est 1 : [3] qui est [1,3] .

La fin :-).

Est-ce que j'ai raison dans tous mes mouvements ?
Merci beaucoup :-).

p.s. la définition de myFilter est tiré du livre Haskell dans le monde réel dans le chapitre 4.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X