“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 8 — #18
i
i
i
i
i
i
i
i
8
1
• Introduction aux concepts de programmation
[1
4
6
4
1]
ce qui est exactement la cinquième rangée.
Première rangée
(0)
1
3
3
1
(0)
1
4
6
4
1
+
+
+
+
+
Cinquième rangée
Quatrième rangée
1
1
1
Deuxième rangée
1
2
1
Troisième rangée
Figure 1.2 Le calcul de la cinquième rangée du triangle de Pascal.
La fonction principale
Maintenant que nous comprenons comment résoudre le problème à la main, nous
pouvons écrire une fonction qui fait les mêmes opérations. La voici :
declare Pascal AddList ShiftLeft ShiftRight
fun {Pascal N}
if N==1 then [1] else
{AddList {ShiftLeft {Pascal N-1}}
{ShiftRight {Pascal N-1}}} end
end
Il y a trois fonctions auxiliaires, AddList, ShiftLeft et ShiftRight, qui restent
à définir.
Les fonctions auxiliaires
Pour compléter la solution, il faut définir les trois fonctions auxiliaires : ShiftLeft,
qui déplace une liste une position à gauche, ShiftRight, qui déplace une liste une
position à droite, et AddList, qui additionne deux listes de même longueur. Voici
ShiftLeft et ShiftRight :
fun {ShiftLeft L}
case L of H|T then H|{ShiftLeft T} else [0] end
end
fun {ShiftRight L} 0|L end
i
i
i
i
i
i
i
i
8
1
• Introduction aux concepts de programmation
[1
4
6
4
1]
ce qui est exactement la cinquième rangée.
Première rangée
(0)
1
3
3
1
(0)
1
4
6
4
1
+
+
+
+
+
Cinquième rangée
Quatrième rangée
1
1
1
Deuxième rangée
1
2
1
Troisième rangée
Figure 1.2 Le calcul de la cinquième rangée du triangle de Pascal.
La fonction principale
Maintenant que nous comprenons comment résoudre le problème à la main, nous
pouvons écrire une fonction qui fait les mêmes opérations. La voici :
declare Pascal AddList ShiftLeft ShiftRight
fun {Pascal N}
if N==1 then [1] else
{AddList {ShiftLeft {Pascal N-1}}
{ShiftRight {Pascal N-1}}} end
end
Il y a trois fonctions auxiliaires, AddList, ShiftLeft et ShiftRight, qui restent
à définir.
Les fonctions auxiliaires
Pour compléter la solution, il faut définir les trois fonctions auxiliaires : ShiftLeft,
qui déplace une liste une position à gauche, ShiftRight, qui déplace une liste une
position à droite, et AddList, qui additionne deux listes de même longueur. Voici
ShiftLeft et ShiftRight :
fun {ShiftLeft L}
case L of H|T then H|{ShiftLeft T} else [0] end
end
fun {ShiftRight L} 0|L end
