Font size
WorksheetsRécursivité
Total questions: 13
Worksheet time: 9mins
Donner le profil de la fonction f
int -> int -> int
float -> float -> float
int -> int -> float
float -> float -> int
Donner le profil de la fonction f
'a -> 'a -> string -> string
float -> float -> string -> string
int -> int -> string -> string
'a -> 'a-> char -> char
int -> int -> char -> char
Donner le profil de la fonction f
(a)
En TD nous avons défini les entiers de Peano. Rappeler une définition du type natP en OCaml.
type natP = int
type natP = Z | int
type natP = Z|S of natP
type natP = Z of int | S of natP
Comment représente t-on l'entier 4 avec le type natP ?
S (S (S (S Z)))
Z
4
S(S (S (S (S Z))))
Si f est une fonction récursive, quelle syntaxe doit-on utiliser en OCaml pour la déclarer ?
let f = ...
let rec f = ...
let f rec = ...
rec let f =
On a implémenté une fonction addP, quel est le résultat de addP (S Z) (S (S (S Z))) ?
3
4
S(S(S(S Z)))
S(S(S Z))
Si une fonction termine, une mesure de cette fonction est une suite qui prend les mêmes arguments que la fonction et qui est
décroissante dans N
croissante dans N
constante dans N
décroissante dans R
On souhaite convertir un type natP en un entier, quelle implémentation est correcte ?
On définit le type entier naturel: type N = int, Donner le profil d'une fonction qui convertir un entier naturel en natP.
f: natP -> N
f:N->N->natP
f:N->N
f:N->natP
On voudrait maintenant implémenter la factorielle: n!=n(n−1)×...×2×1 Combien vaut 6! ?
120
670
720
12
Quel sera le profil de factorielle ?
factorielle:int -> int -> int
factorielle: int -> int*int
factorielle:int -> int
factorielle: int*int
Quelle implémentation de n! est correcte ?
let rec fact n = match n with
|0 -> 1
|n->n*(fact (n-1));;
let rec fact n = match n with
|1 -> 1
|n->n*(fact (n-1));;
let fact n = match n with
|0 -> 1
|n->n*(fact (n-1));;
let rec fact n = match n with
|0 -> 1
|n->n*(fact n);;
