2010-01-16 27 views

Respuesta

1

Utilice la función floor. En SBCL:

* (floor (/ 7 2)) 

3 
1/2 

Se devuelven dos valores, la parte entera y la parte fraccionaria.

+0

FLOOR hace la división por sí mismo. – Svante

+0

Es cierto, pero también funciona con un solo argumento. –

3

Usted puede utilizar la función floor:

(floor 7 2) 
3 
1 

Observe que devuelve varios valores, y sólo necesita la primera. Desde floor devuelve varios valores, que se puede hacer con multiple-value-bind de la siguiente manera:

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

Editar: Como Rainer señala en su comentario, sólo puede pasar el resultado de floor como argumento si todo lo que necesita es el cociente.

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

estoy dejando la referencia a multiple-value-bind en la respuesta, ya que es una función importante estar familiarizado.

+0

¿cómo obtengo el primer valor? ¿Devuelve una lista? – appusajeev

+0

@appusajeev: actualicé la respuesta –

+3

que no es necesaria. el primer valor se pasa automáticamente al siguiente código. Necesitas el MULTIPLE-VALUE-BIND si quieres todos los valores o algunos. (values ​​(floor 7 2)) simplemente devuelve el primero. –

17

Ver FLOOR, CEILING and TRUNCATE en ANSI Common Lisp.

Ejemplos (ver los números positivos y negativos):

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 

Por lo general, para la división a entero TRUNCATE se utiliza.