2010-01-16 11 views

Répondre

1

Utilisez la fonction floor. En SBCL:

* (floor (/ 7 2)) 

3 
1/2 

Deux valeurs sont renvoyées, la partie entière et la partie fractionnaire.

+0

FLOOR fait la division par lui-même. – Svante

+0

True, mais cela fonctionne également avec un seul argument. –

3

Vous pouvez utiliser la fonction floor:

(floor 7 2) 
3 
1 

Notez qu'il renvoie plusieurs valeurs, et vous avez seulement besoin de la première. Depuis floor renvoie des valeurs multiples, qui peut être fait avec multiple-value-bind comme suit:

(multiple-value-bind (q r) (floor 7 2) q) 
=> 3 

Edit: Comme Rainer note dans son commentaire, il vous suffit de passer le résultat de floor comme argument si vous avez besoin est le quotient.

[1]> (floor 7 2) 
3 ; 
1 
[2]> (+ (floor 7 2) 5) 
8 
[3]> 

Je quitte la référence à multiple-value-bind dans la réponse, car il est une fonction importante à connaître.

+0

comment puis-je obtenir la première valeur? retourne-t-il une liste ?? – appusajeev

+0

@appusajeev: J'ai mis à jour la réponse –

+3

qui n'est pas nécessaire. la première valeur est automatiquement transmise au code suivant. Vous avez besoin de MULTIPLE-VALUE-BIND si vous voulez toutes les valeurs ou certaines. (valeurs (étage 7 2)) renvoie juste le premier. –

17

Voir FLOOR, CEILING and TRUNCATE dans ANSI Common Lisp.

exemples (voir les nombres positifs et négatifs):

CL-USER 218 > (floor -5 2) 
-3 
1 

CL-USER 219 > (ceiling -5 2) 
-2 
-1 

CL-USER 220 > (truncate -5 2) 
-2 
-1 

CL-USER 221 > (floor 5 2) 
2 
1 

CL-USER 222 > (ceiling 5 2) 
3 
-1 

CL-USER 223 > (truncate 5 2) 
2 
1 

Habituellement, la division vers entier TRUNCATE est utilisé.