Question posée à l'examen du 3 juillet 2000
program SchemeList;
{
une structure qui peut contenir soit une valeur, soit une paire
}
type PSchemePaireOuValeur = ^TSchemePaireOuValeur;
TSchemePaireOuValeur = record
{ le record contient-il une valeur }
mEstValeur:boolean;
{si ce record est une valeur}
mValeur : integer;
{si ce record est une paire}
{ car de la paire}
mCar : PSchemePaireOuValeur;
{ cdr de la paire }
mCdr : PSchemePaireOuValeur;
end; { TSchemePaireOuValeur }
var gSchemePaire: PSchemePaireOuValeur;
{
Une fonction qui cree une valeur
}
function creeValeur(inValeur : integer): PSchemePaireOuValeur;
var lResultat : PSchemePaireOuValeur;
begin
new(lResultat);
lResultat^.mEstValeur:=true;
lResultat^.mValeur:=inValeur;
lResultat^.mCar:=nil;
lResultat^.mCdr:=nil;
creeValeur:=lResultat;
end; { creeValeur }
{
Une fonction qui cree une paire
}
function creePaire(inCar,inCdr: PSchemePaireOuValeur):PSchemePaireOuValeur;
var lResultat : PSchemePaireOuValeur;
begin
new(lResultat);
lResultat^.mEstValeur:=false;
lResultat^.mValeur:=0;
lResultat^.mCar:=inCar;
lResultat^.mCdr:=inCdr;
creePaire:=lResultat;
end; { creePaire }
{
Une procedure pour afficher
}
procedure display(inPaire : PSchemePaireOuValeur);
{vous etes autorise(es) de mettre des variables ici}
begin
{Mettez votre code ici.
Les commentaires du programme principal vous indiquent ce que
la procedure Display est censee imprimer}
end;
begin
gSchemePaire:=creePaire(creeValeur(1),
creePaire(creeValeur(2),
creePaire(creeValeur(3),nil)));
display(nil) {donne "()"};
writeln;
display(gSchemePaire); {donne "(1 . (2 . (3 . ())))"}
gSchemePaire:=creePaire(creePaire(creeValeur(1),
creeValeur(2)),
creePaire(creeValeur(3),
creeValeur(4)));
writeln;
display(gSchemePaire); {donne "((1.2).(3.4))"}
end.
Site Hosting: Bronco