- Pour écrire des fonctions sur les listes il faut d'abord
faire exécuter la commande suivante:
Require Import List.
- La fonction suivante prend en entrée un nombre et retourne
en sortie le nombre 3 si l'entrée était 0 et
l'entrée plus 10 dans les autres cas.
Definition bizarre3et10 (x:nat) :=
match x with
0 => 3
| _ => x + 10
end.
- La fonction rev donnée ci-dessous prend en entrée un type et une liste
d'éléments de ce type et retourne la liste renversé
Fixpoint rev_r (A : Type) (l l': list A) :=
match l with nil => l' | a::l1 => rev_r A l1 (a::l') end.
Definition rev (A : Type) (l : list A) := rev_r A l nil.
- On peut tester cette fonction en appliquant la commande
suivante
Eval vm_compute in rev _ (1::2::3::4::nil).
- La fonction suivante prend en entrée une fonction p
des entiers naturels vers les booléens et
une liste d'entiers
naturels et
enlève
tous les éléments pour lesquels la fonction p
retourne true.
Fixpoint remove (p:nat -> bool) (l: list nat) :=
match l with
nil => nil
| a::l' =>
match p a with true => remove p l' | false => a::remove p l' end
end.
- L'expression match p a with true => remove p l | false =>
a::remove p l end peut aussi s'écrire if p a then
remove p l else a:: remove p l.
- La fonction suivante prend en entrée un nombre n et
additionne tous les nombres compris entre 0 et n-1.
Fixpoint tsum (n:nat) :=
match n with 0 => 0 | S p => p + tsum p end.