18

その場合(/ 7 2)、結果を得るにはどうすればよい3ですか? (/ 7 2.0) を実行3.5すると、予想どおり が得られます。

4

4 に答える 4

26
(floor 7 2)

参照: http://rosettacode.org/wiki/Basic_integer_arithmetic#Common_Lisp

于 2010-01-16T09:40:01.623 に答える
21

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

通常、整数への除算には TRUNCATE が使用されます。

于 2010-01-16T11:54:42.520 に答える
7

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よく知っておくべき重要な機能であるため、回答に参照を残しています。

于 2010-01-16T09:40:30.113 に答える
3

機能を使用してくださいfloor。SBCL では:

* (floor (/ 7 2))

3
1/2

整数部分と小数部分の 2 つの値が返されます。

于 2010-01-16T09:39:30.827 に答える