Bonjour, pourriez vous m'aider à comprendre comment évaluer la fonction suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 let rec filtrer = fun p -> function | [] -> [] | x::l -> if p x then x::(filtrer p l) else filtrer p l;;
la fonction filter prend un premier argument. Etant donné que l'on a dans le code if p x alors on peut déduire que p est une fonction renvoyant un boolean.
filter renvoit également une liste
Si je m'arrête là, la logique voudrait que cette fonction soit évalué par
('a-> bool) -> 'a list
Sauf que la bonne évaluation est
('a-> bool) -> ('a list) -> 'a list
Je vois bien que l'un des arguments de la fonction est une liste vu qu'on matche une liste...mais pourtant ça ne me parle pas du tout quand je vois la fonction écrite ainsi
J'aurais plutôt écris
Je trouve cette écriture bien plus logique et compréhensible...en un coup d'oeil on voit ce qu'il se passe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 let rec filtrer = fun p -> fun l1 -> match l1 with | [] -> [] | x::l -> if p x then x::(filtrer p l) else filtrer p l;;
Là, on a remplacé le fun l1 -> match l1 with par function....et je ne comprends pas cette écriture là...
En espérant que vous ayez compris mon problème^^
Partager