Common Lisp中的整数除法?

app*_*eev 14 lisp clisp casting

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

Rai*_*wig 18

请参阅ANSI Common Lisp中的FLOOR,CEILING和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
Run Code Online (Sandbox Code Playgroud)

通常用于除以整数TRUNCATE.


Eli*_*sky 6

您可以使用该floor功能:

(floor 7 2)
3
1
Run Code Online (Sandbox Code Playgroud)

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

(multiple-value-bind (q r) (floor 7 2) q)
=> 3
Run Code Online (Sandbox Code Playgroud)

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

[1]> (floor 7 2)
3 ;
1
[2]> (+ (floor 7 2) 5)
8
[3]>
Run Code Online (Sandbox Code Playgroud)

我将multiple-value-bind在答案中留下参考,因为它是一个需要熟悉的重要功能。

  • 那是不需要的。第一个值会自动传递给下一个代码。如果您想要所有值或某些值,则需要 MULTIPLE-VALUE-BIND。(values (floor 7 2)) 只返回第一个。 (3认同)