“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 89 — #99
i
i
i
i
i
i
i
i
2.6 Du langage noyau au langage pratique
89
fun {Map Xs F}
case Xs of nil then nil
[] X|Xr then {F X}|{Map Xr F} end
end
Map applique la fonction F à tous les éléments d’une liste et renvoie le résultat. Voici
un exemple d’appel :
{Browse {Map [1 2 3 4] fun {$ X} X * X end}}
Il affiche [1 4 9 16]. Voici la traduction de Map en langage noyau :
proc {Map Xs F ?Ys}
case Xs of nil then Ys=nil
else case Xs of X|Xr then
local Y Yr in
Ys=Y|Yr {F X Y} {Map Xr F Yr}
end
end end
end
La variable dataflow Yr est utilisée à la place du résultat dans l’appel récursif {Map
Xr F Yr}. L’appel récursif peut alors être le dernier appel. On obtient alors la
récursion terminale qui s’exécute avec la même efficacité en temps et en espace
qu’une construction itérative comme une boucle while.
2.6.3 L’interface interactive (l’instruction declare)
Le Labo interactif et le système Mozart ont tous les deux une interface interactive
qui permet l’introduction des fragments de programme et leur exécution immédiate.
Les fragments doivent respecter la syntaxe des instructions interactives qui est donnée
dans le tableau 2.8.
interStmt : := statement
| declare { declPart }+ [ interStmt ]
| declare { declPart }+ in interStmt
declPart : := variable | |pattern ´=´ expression | |statement
Tableau 2.8 La syntaxe des instructions interactives.
Une instruction interactive (interStmt) peut être toute instruction légale ou la
nouvelle instruction declare. Nous supposons que l’utilisateur donne des instructions interactives au système une par une. (Dans les exemples du livre, l’instruction
© Dunod – La photocopie non autorisée est un délit
Précédent

- 104/370

Suivant