Programmation

De
Publié par

Cet ouvrage présente l'originalité d'expliquer tous les concepts majeurs de la programmation en informatique : programmation déclarative, programmation orientée objet, programmation parallèle, programmation par contraintes... Cette approche très synthétique permet à l'étudiant de comprendre l'unité sous-jacente qui relie tous ces modes de programmation. Les concepts présentés sont illustrés par des centaines d'extraits de code qui peuvent être exécutés avec un logiciel interactif associé au livre.

Publié le : mercredi 5 septembre 2007
Lecture(s) : 70
Licence : Tous droits réservés
EAN13 : 9782100528615
Nombre de pages : 368
Voir plus Voir moins
Cette publication est uniquement disponible à l'achat
84
2La programmation déclarative
Les instructionsifetcaseimbriquées Nous ajoutons du sucre syntaxique pour faciliter l’écriture des instructionsifetcase avec plusieurs alternatives et des conditions compliquées. Le tableau 2.5 montre la syntaxe complète de l’instructionif. Le tableau 2.6 montre la syntaxe complète de l’instructioncaseet ses formes. (Certains non terminaux dans ces tableaux sont définis en annexe B.) Ces instructions sont traduites en instructionsifetcase primitives du langage noyau. Voici un exemple d’une instructioncasecomplète :
caseXs#Ysofnil#Ysthens1 [] Xs#nilthens2 [] (X|Xr)#(Y|Yr)andthenX=<Ythens3 elses4end
Elle contient une série d’alternatives séparées avec le symbole «[]». Les alternatives sont souvent appelées des clauses. Voici la traduction en syntaxe noyau :
caseXsofnilthens1else caseYsofnilthens2else caseXsofX|Xrthen caseYsofY|Yrthen ifX=<Ythens3elses4end elses4end elses4end end end
Cette traduction montre une propriété importante de l’instructioncasecomplète : les clauses sont essayées en séquence en partant de la première clause. L’exécution continue audelà d’une clause seulement si la forme de la clause est incompatible avec l’argument d’entrée. Les formes imbriquées sont traitées en essayant d’abord la forme à l’extérieur et ensuite les formes plus à l’intérieur. La forme imbriquée(X|Xr)#(Y|Yr)a une forme extérieure avec la structureA#Bet deux formes intérieures avec la structureA|B. Les trois formes sont des tuples écrits avec une syntaxe infixée, avec les opérateurs infixés´#´et´|´. Elles auraient pu être écrites avec la syntaxe habituelle comm #´(A B)et´|´(A B)eure.Cahuqferoemniétéir(X|Xr)et(Y|Yr)est mise dans sa propre instructioncasede base. La forme extérieure avec´#´disparaît de la traduction parce qu’elle apparaît aussi dans l’entrée ducase. Dans cet exemple la correspondance avec´#´peut donc être faite lors de la compilation.
2.6Du langage noyau au langage pratique
statement: := ifexpressiontheninStatement{elseifexpressiontheninStatement} [elseinStatement]end |. . . inStatement: := [ {declPart}+in]statement
Tableau 2.5
L’instructionif.
statement: := caseexpressionofpattern[andthenexpression]theninStatement{´[]´pattern[andthenexpression]theninStatement} [elseinStatement]end |. . . pattern: := variable | atom | int | float| string |unit|true|false | label´(´{ [feature’:’ ]pattern} [´...´]´)´ | pattern consBinOp pattern|´[´{pattern}+´]´ consBinOp: :=´#´|´|´
Tableau 2.6
L’instructioncase.
85
Les opérateursandthenetorelse Les opérateursandthenetorelsesont utilisés dans les calculs avec les valeurs booléennes. L’expression
expression1
est traduite en
if
andthen
expression1
then
expression2
expression2
else
false
end
L’avantage deandthenest queexpression2ne sera pas évaluée siexpression1est false. Il y a un opérateurorelseavec un comportement analogue. L’expression
expression1orelseexpression2 Dunod – La photocopie non autorisée est un délit est traduite en
86
ifexpression1
2La programmation déclarative
then true elseexpression2
end
c’estàdireexpression2n’est pas évaluée siexpression1esttrue.
Les balises d’insertion La balise d’insertion «$» change toute instruction en une expression. La valeur de l’expression est ce qui est à la position indiquée par la balise. Par exemple, l’instruction {P X1 X2 X3}peut être écrite{P X1 $ X3}, qui est une expression avec la valeurX2. Le code source peut donc être plus concis, parce que l’on évite de déclarer et d’utiliser l’identificateurX2. La variable qui correspond àX2est cachée du code source. Les balises d’insertion peuvent rendre le code source plus lisible pour un program meur averti, quoiqu’il soit plus difficile pour un débutant de voir comment le code est traduit en langage noyau. Nous les utiliserons uniquement quand elles augmentent considérablement la lisibilité. Par exemple, au lieu d’écrire
localXin{Obj get(X)} {Browse X}end
nous écrivons{Browse {Obj get($)}}. Une fois que vous êtes habitué aux balises d’insertions, elles deviennent concises et claires. Notez que la syntaxe des valeurs procédurales expliquée dans la section 2.3.3 est cohérente avec la syntaxe des balises d’insertion.
2.6.2 Les fonctions (l’instructionfun) Le modèle déclaratif fournit une abstraction linguistique pour programmer avec des fonctions. C’est notre premier exemple d’une abstraction linguistique comme nous l’avons définie en section 2.1.2. Nous définissons la nouvelle syntaxe des définitions et appels de fonction et montrons comment les traduire en langage noyau.
La définition d’une fonction Une définition de fonction est différente d’une définition de procédure de deux points de vue : elle commence avec le mot cléfunet le corps doit terminer avec une expression. Voici un exemple d’une définition simple :
fun{F X1 ... XN}statement
expressionend
Cela devient la définition de procédure suivante :
proc{F X1 ... XN ?R}statementR=expressionend
Soyez le premier à déposer un commentaire !

17/1000 caractères maximum.