“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 103 — #113
i
i
i
i
i
i
i
i
2.8 Exercices
103
➤ Exercice 7 — Les fermetures à portée lexicale
Prenez le code suivant :
declare Max3 Max5
proc {SpecialMax Value ?SMax}
fun {SMax X}
if X>Value then X else Value end
end
end
{SpecialMax 3 Max3}
{SpecialMax 5 Max5}
De la même manière que l’exercice précédent, pronostiquez ce qui se passe
quand on exécute :
{Browse [{Max3 4} {Max5 4}]}
Vérifiez vos connaissances par l’exécution de cet exemple.
➤ Exercice 8 — La récursion terminale
Cet exercice examine l’importance de la récursion terminale dans la lumière de
notre sémantique. Prenez les deux fonctions suivantes :
fun {Sum1 N}
if N==0 then 0 else N+{Sum1 N-1} end
end
fun {Sum2 N S}
if N==0 then S else {Sum2 N-1 N+S} end
end
Maintenant faites les choses suivantes :
a) Traduisez les deux définitions en syntaxe noyau. Il doit être clair que Sum2
est récursive terminale et Sum1 ne l’est pas.
b) Exécutez les deux appels {Sum1 10} et {Sum2 10 0} à la main, en
utilisant la sémantique de ce chapitre pour suivre ce qui se passe sur la pile et
dans la mémoire. Quelle est la taille maximale de la pile dans chaque cas ?
c) Que se passerait-il pendant l’exécution si vous appeliez {Sum1 100000000}
ou {Sum2 100000000 0} ? Lequel des deux fonctionnera vraisemblablement ? Lequel ne fonctionnera pas ? Exécutez les deux pour vérifier votre
raisonnement.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 118/370

Suivant