TP2 : LE TYPE ENTIER
On désire implémenter en LISP les fonctions de manipulation des
entiers naturels.
En LISP, on peut représenter l'entier 0 par la liste vide
et tout autre
entier peut être représenté par une liste contenant pour premier élément s et
pour reste un autre entier (le s signifiant ``successeur de'')
Ainsi :
- 0 sera représenté par nil
- 1 sera représenté par (s)= (cons 's nil)
- 2 sera représenté par (s s)= (cons 's (cons 's nil))
- 3 sera représenté par (s s s)=(cons 's (cons 's (cons 's nil)))
- etc.
Écrivez les fonctions suivantes
- 1.
- nul? qui renvoie vrai si son argument est l'entier nul
>(nul? '(s s))
nil
- 2.
- entier? qui renvoie vrai si son argument est un entier
>(entier? '(s s s s))
t
>(entier? 'a)
nil
- 3.
- suc qui renvoie le successeur d'un entier
>(suc '(s s))
(s s s)
- 4.
- pred qui renvoie le prédecesseur d'un entier non nul
> (pred '(s s))
(s)
- 5.
- plus qui renvoie l'entier résultant de l'addition de deux entiers
> (plus '(s s) '(s s s s))
(s s s s s s)
- 6.
- inf? qui renvoie vrai si le premier argument est un entier
inférieur ou égal au second argument
> (inf? '(s s) '(s s s s))
t
- 7.
- mult qui renvoie le produit
> (mult '(s s) '(s s s s))
(s s s s s s s s)
- 8.
- puissance qui renvoie l'entier élevé à la puissance
> (puissance '(s s) '(s s s))
(s s s s s s s s)
- 9.
- traduc qui traduit un entier en nombre
> (traduc '(s s s s))
4
- 10.
- ductrad qui fait la traduction inverse
> (ductrad 4)
(s s s s)
Florence Bannay - Béatrice Duval
23-10-2000