Целочисленное деление в Common Lisp?
Вопрос
Когда я делаю (/ 7 2)
, что мне сделать, чтобы получить результат 3
?Если я это сделаю (/7 2.0), я получу 3.5
, что и ожидалось.
Решение
(floor 7 2)
Ссылка: http://rosettacode.org/wiki/Basic_integer_arithmetic#Common_Lisp
Другие советы
Видеть ПОЛ, ПОТОЛОК И ОБРЕЗКА в ANSI Common Lisp.
Примеры (см. положительные и отрицательные числа):
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
Обычно для деления на целое число используется TRUNCATE.
Вы можете использовать floor
функция:
(floor 7 2)
3
1
Обратите внимание, что он возвращает несколько значений, и вам понадобится только первое.С floor
возвращает несколько значений, это можно сделать с помощью multiple-value-bind
следующее:
(multiple-value-bind (q r) (floor 7 2) q)
=> 3
Редактировать: Как отмечает Райнер в своем комментарии, вы можете просто передать результат floor
в качестве аргумента, если все, что вам нужно, это частное.
[1]> (floor 7 2)
3 ;
1
[2]> (+ (floor 7 2) 5)
8
[3]>
ссылку оставляю multiple-value-bind
в ответе, поскольку это важная функция, с которой необходимо ознакомиться.
Использовать floor
функция.В СБКЛ:
* (floor (/ 7 2))
3
1/2
Возвращаются два значения: целая часть и дробная часть.