[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Top] [Table des matières] [Index] [ ? ]

3.6 Opérations arithmétiques

Le Emacs Lisp fournit les quatre opérations arithmétiques traditionnelles: addition, soustraction, multiplication et division. Les fonctions de reste et de modulo complètent les fonctions de division. Les fonctions additionner ou soustraire 1 sont fournis parce qu'elles sont traditionnelles en Lisp et utilisées généralement.

Toutes ces fonctions, à part %, retourne une valeur à virgule flottante si au moins un argument est une valeur à virgule flottante.

Il est important de noter qu'en Emacs Lisp, les fonctions arithmétiques ne vérifient pas le débordement. Ainsi (1+ 268435455) peut être évaluer à -268435456, selon votre matériel.

Function: 1+ number-or-marker

Cette fonction renvoie number-or-marker plus 1. Par exemple,

 
(setq foo 4)
     ⇒ 4
(1+ foo)
     ⇒ 5

Cette fonction n'est pas analogue à l'opérateur C ++ —elle n'incrémente pas une variable—. Elle calcule juste la somme. Ainsi, si nous continuons,

 
foo
     ⇒ 4

Si vous voulez incrémenter la variable, vous devez employer setq, comme ceci:

 
(setq foo (1+ foo))
     ⇒ 5
Function: 1- number-or-marker

Cette fonction renvoie number-or-marker moins 1.

Function: + &rest numbers-or-markers

Cette fonction fait la somme de ses arguments. Si aucun argument n'est donné, + retourne 0.

 
(+)
     ⇒ 0
(+ 1)
     ⇒ 1
(+ 1 2 3 4)
     ⇒ 10
Function: - &optional number-or-marker &rest more-numbers-or-markers

La fonction - atteint deux objectifs: négation et soustraction. Quand - a un argument simple, la valeur est le négatif de l'argument. Quand il y a des arguments multiples, - soustrait chacun des more-numbers-or-markers de number-or-marker, de manière cumulée. S'il n'y a aucun argument, le résultat est 0.

 
(- 10 1 2 3 4)
     ⇒ 0
(- 10)
     ⇒ -10
(-)
     ⇒ 0
Function: * &rest numbers-or-markers

Cette fonction multiplie ses arguments entre elles, et renvoie le produit. Si aucun argument n'est donné, * retourne 1.

 
(*)
     ⇒ 1
(* 1)
     ⇒ 1
(* 1 2 3 4)
     ⇒ 24
Function: / dividend divisor &rest divisors

Cette fonction divise dividend par divisor et retourne le quotient. S'il y a des arguments additionnels divisors, il divise dividend par chaque diviseur alternativement. Chaque argument peut être un nombre ou un marqueur.

Si tous les arguments sont des nombres entiers, alors le résultat est aussi un nombre entier. Ceci signifie que le résultat doit être arrondi. Sur la plupart des machines, le résultat est arrondi vers le zéro après chaque division, mais quelques machines peuvent arrondir différemment les arguments négatifs. C'est parce que la fonction de Lisp / est implémentée en utilisant l'opérateur de division de C qui permet l'arrondi en fonction de la machine. Du côté pratique, toutes les machines connues arrondissent en mode standard.

Si vous divisez un nombre entier par 0, une erreur arith-error est signalée. (Voir la section Errors.) La division d'un nombre à virgule flottante par zéro renvoie l'un ou l'autre infini ou NaN si votre machine supporte les nombres à virgule flottante IEEE; autrement, elle signale une erreur arith-error.

 
(/ 6 2)
     ⇒ 3
(/ 5 2)
     ⇒ 2
(/ 5.0 2)
     ⇒ 2.5
(/ 5 2.0)
     ⇒ 2.5
(/ 5.0 2.0)
     ⇒ 2.5
(/ 25 3 2)
     ⇒ 4
(/ -17 6)
     ⇒ -2   (pourrait être -3 sur certaines machines)
Function: % dividend divisor

Cette fonction renvoie le reste en nombre entier après la division de dividend par divisor. Les arguments doivent être des nombres entiers ou des marqueurs.

Pour des arguments négatifs, le reste est en principe dépendant de la machine puisque le quotient est variable; mais dans la pratique, toutes les machines connues se comportent de la même façon.

Un arith-error est généré quand divisor est 0.

 
(% 9 4)
     ⇒ 1
(% -9 4)
     ⇒ -1
(% 9 -4)
     ⇒ 1
(% -9 -4)
     ⇒ -1

Pour deux nombres entiers quelconques dividend et divisor,

 
(+ (% dividend divisor)
   (* (/ dividend divisor) divisor))

est toujours égale à dividend.

Function: mod dividend divisor

Cette fonction renvoie la valeur de dividend modulo divisor; en d'autres termes, le reste après la division de dividend par divisor, mais avec le même signe que divisor. Les arguments doivent être des nombres ou des marqueurs.

À la différence de %, mod renvoie un résultat bien défini pour les arguments négatifs. Il permet également des arguments à virgule flottante; il arrondit le quotient à un nombre entier vers le bas (vers moins l'infini), et utilise ce quotient pour calculer le reste.

Un arith-error est généré quand divisor est 0.

 
(mod 9 4)
     ⇒ 1
(mod -9 4)
     ⇒ 3
(mod 9 -4)
     ⇒ -3
(mod -9 -4)
     ⇒ -1
(mod 5.5 2.5)
     ⇒ .5

Pour deux nombres quelconques dividend et divisor,

 
(+ (mod dividend divisor)
   (* (floor dividend divisor) divisor))

est toujours égale à dividend, sauf si l'un ou l'autre argument est un nombre à virgule flottante, une erreur sera générée. Pour floor, voir les Conversions numériques.


[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Top] [Table des matières] [Index] [ ? ]

Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.