Common Lisp中的整数除法?

时间:2010-01-16 09:34:09

标签: lisp casting clisp

当我(/ 7 2)时,我应该怎样做才能得到结果3?如果我这样做(/ 7 2.0),我得到3.5,这是预期的。

5 个答案:

答案 0 :(得分:20)

答案 1 :(得分:17)

请参阅ANSI Common Lisp中的FLOOR, CEILING and TRUNCATE

示例(见正数和负数):

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。

答案 2 :(得分:3)

您可以使用floor功能:

(floor 7 2)
3
1

请注意,它会返回多个值,您只需要第一个值。由于floor会返回多个值,因此可以使用multiple-value-bind完成,如下所示:

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

编辑:正如Rainer在评论中指出的那样,如果您需要的是商,则可以将floor的结果作为参数传递。

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

我在答案中留下multiple-value-bind的引用,因为这是一个熟悉的重要功能。

答案 3 :(得分:1)

使用floor功能。在SBCL:

* (floor (/ 7 2))

3
1/2

返回两个值,整数部分和小数部分。

答案 4 :(得分:-1)

我的解决方案是定义div函数:

(defun div (n d)
  (multiple-value-bind (q r) (floor n d) q))

> (div 7 2)
3