2010-01-16 7 views

risposta

1

Utilizzare la funzione floor. In SBCL:

* (floor (/ 7 2)) 

3 
1/2 

Vengono restituiti due valori, la parte intera e la parte frazionaria.

+0

FLOOR esegue la divisione da solo. – Svante

+0

Vero, ma funziona anche con un singolo argomento. –

3

È possibile utilizzare la funzione floor:

(floor 7 2) 
3 
1 

noti che restituisce più valori, ed è necessario solo il primo. Dal momento che floor restituisce più valori, che può essere fatto con multiple-value-bind come segue:

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

Edit: Come Rainer fa notare nel suo commento, si può semplicemente passare il risultato di floor come argomento se tutto ciò che serve è la quoziente.

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

che sto lasciando il riferimento alla multiple-value-bind nella risposta, dal momento che è una funzione importante essere a conoscenza.

+0

come ottengo il primo valore? restituisce una lista ?? – appusajeev

+0

@appusajeev: Ho aggiornato la risposta –

+3

che non è necessaria. il primo valore viene automaticamente passato al prossimo codice. Hai bisogno del MULTIPLE-VALUE-BIND se vuoi tutti i valori o alcuni. (valori (piano 7 2)) restituisce solo il primo. –

17

Vedere FLOOR, CEILING and TRUNCATE in ANSI Common Lisp.

esempi (vedere i numeri positivi e negativi):

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 

solito per divisione a intero TRUNCATE viene utilizzato.