• Aucun résultat trouvé

Listes et fonctions récursives

N/A
N/A
Protected

Academic year: 2022

Partager "Listes et fonctions récursives"

Copied!
3
0
0

Texte intégral

(1)

Chapitre 3 Listes et fonctions récursives Option Info MPSI

Listes et fonctions récursives Chapitre 3

1 Listes.

Dénition simple de listes : let l = [ 5;2;1;6];;

val l : int list = [5; 2; 1; 6]

Ajout d'un élément en tête d'une liste : let l_2 = 7::l;;

val l_2 : int list = [7; 5; 2; 1; 6]

: : est un opérateur de construction de listes. Il faut que l'élément rajouté en tête de la liste ait le même type que les autres éléments de la liste.

Liste vide : [];;- : 'a list = []

La liste vide a un type "polymorphe" : on peut l'utiliser avec plusieurs types diérents : let lis2 = 5::[];;

val lis2 : int list = [5]

let lis3 = true::[];;

val lis3 : bool list = [true]

Quelques fonctions utiles pour les listes :

ˆ La fonction hd, pour l'accès au premier élément d'une liste : List.hd;;

- : 'a list -> 'a = <fun>

let lis = [8;4;3;2];;

val lis : int list = [8; 4; 3; 2]

List.hd(lis);;

- : int = 8 List.hd([]);;

Exception: Failure "hd".

ˆ La fonction tl, pour l'accès au reste de la liste : List.tl;;

- : 'a list -> 'a list = <fun>

List.tl(lis);;

- : int list = [4; 3; 2]

List.tl([]);;

Exception: Failure "tl".

ˆ La fonction length, pour l'accès à la taille de la liste :

sebjaumaths.free.fr page 1 Lycée St Exupéry

(2)

Chapitre 3 Listes et fonctions récursives Option Info MPSI

List.length;;

- : 'a list -> int = <fun>

List.length(lis);;

- : int = 4

List.length([]);;

- : int = 0

ˆ La fonction append, pour la concaténation de deux listes : List.append;;

- : 'a list -> 'a list -> 'a list = <fun>

let lis_1 = [8;4;1;3];;

val lis_1 : int list = [8; 4; 1; 3]

let lis_2 = [7;5];;

val lis_2 : int list = [7; 5]

List.append lis_1 lis_2;;

- : int list = [8; 4; 1; 3; 7; 5]

ˆ La fonction map, pour la appliquer une fonction aux éléments d'une liste : List.map;;

- : ('a -> 'b) -> 'a list -> 'b list = <fun>

let lis_1 = [8;4;1;3];;

val lis_1 : int list = [8; 4; 1; 3]

List.map (fun x-> 2*x+1) lis_1;;

- : int list = [17; 9; 3; 7]

Exercice 1 : Écrire la fonction distance_tete qui prend en argument une liste l d'entiers et renvoie une liste composé de l'élément en tête de l, suivi des distances entre cet élément et le reste de la liste l :

val distance_tete : int list -> int list = <fun>

Exemple :

distance_tete [ 5;7;2;15;9 ;-3];;

- : int list = [5; 2; 3; 10; 4; 8]

sebjaumaths.free.fr page 2 Lycée St Exupéry

(3)

Chapitre 3 Listes et fonctions récursives Option Info MPSI

2 Dénition de fonctions récursives.

Une fonction récursive est une fonction qui peut s'utiliser elle-même dans le calcul.

Dénition 1 :

Exemple : Dénition de la fonction factorielle :

let rec fact n = if n=0 then 1 else n*fact(n-1);;

val fact : int -> int = <fun>

Le mot clé rec indique à Ocaml que l'identiant fact employé dans la dénition de la fonction correspond à la fonction que l'on dénit.

Syntaxe de la dénition d'une fonction récursive :

let rec fonction id1 . . . idn = expr ; ; let rec fonction = fun id1 . . . idn -> expr ; ;ou

Propriété 1 :

Exercice 2 : On propose la récursive suivante : let rec ma_fonction n_1 n_2 =

if n_1 > n_2 then []

else n_1::( ma_fonction (n_1+1) n_2 );;

Quelle est la signature de la fonction et que renvoie-t-elle avec les arguments n1 = 5 etn2 = 9?

sebjaumaths.free.fr page 3 Lycée St Exupéry

Références

Documents relatifs

Le vaccin n'étant pas totalement ecace, parmi les vaccinés, on compte 1/12 de malades.. Traduire les hypothèses

[r]

Écrire à l'aide des connecteurs logiques et de la relation parent une propriété qui exprime que toute personne de P a exactement deux parents.. Dénir par des règles d'inférence

En eet, une des applications du logarithme décimal est de déterminer le nombre de chires nécessaires à l'écriture d'un nombre entier.. On admet que ϕ admet pour limite 0

À l'aide du tableau, répondre aux

Pour demain, je dois faire un exercice où on me demande de démontrer que ABCD est un parallélogramme.. Je ne sais pas comment

Fonctions déjà connues mais pas utilisées comme telles : périmètre d'un cercle en fonction de son rayon : p(r) = ………..

import os # Import de la bibliotheque os permettant de realiser des operations systemes.. Pour cela plusieurs solutions sont possibles... il faut saisir un nombre entier POSITIF