| Université Paris 6 Licence d'informatique | Module de Programmation Année 2000-2001 |
|---|
let rec it = function f -> function a -> function n -> if n=0 then a else (f (it f a (n-1)));;
map : ('a -> 'b) -> 'a list -> 'b list, quel sont le
type et la valeur dans un environment E de
it (map (fun x -> x + 3)) ? Que calcule cette fonction ?
let rec rec_schema = function (b,d,f,a,n) -> if (b n) then a else f (rec_schema (b,d,f,a,(d n))) ;;En déduire la fonction it de l'exercice précédent.
let rec foo = function l ->
if (l = [])
then []
else
let r = (foo (tl l)) in
if (r = [])
then
[hd l]
else
(hd r) :: (foo ((hd l) :: (foo (tl r))))
En notant Efoo l'environnement de définition de foo, détaillez
l'évaluation de foo([1;2]). Que calcule foo ? Combien d'appels
récursifs ferait foo([1;2;3]) ? Réécrivez la fonction foo en
utilisant des constructions match ... with ....
type 'a untyp = Vid | N of 'a * ('a list) ;;
let rec une_fct = function h -> function un_elt -> match un_elt with
| Vid -> []
| N(s, []) -> [h(s)]
| N (s, t :: r) -> h(t) :: (une_fct h (N(s,r)) ) ;;
une_fct (function x -> x+3) (N(5, [10;11]));;
exception pas_grave of int ;;
exception grave of string ;;
let pseudo_id = function x ->
if (x < 0)
then raise(pas_grave(-x))
else if (x = 0)
then raise(grave "Argh !!!")
else x ;;
Quelles sont les valeurs de
pseudo_id(-4),
pseudo_id(0) et
pseudo_id(2) ?
On ajoute la déclaration :
let f = let val = 10
in
function x ->
try (let val = 100 in pseudo_id(x)-val) with
| pas_grave n -> if (n < 0)
then raise(grave "impossible ?")
else n + val
| grave "Argh !!!" -> raise(pas_grave(10))
| grave s -> raise(grave "possible ?") ;;
Que donnent les évaluations f(-100), (0), f(100),
f(grave "Ouf !!!") et f(raise(grave "Ouf !!!")) ?
Ce document a été traduit de LATEX par HEVEA.