Next: Rounding Operations, Previous: Numeric Conversions, Up: Numbers [Contents][Index]
Emacs
Lispは伝統的な4つの算術演算(加減乗除)、同様に剰余とmodulusの関数、および1加算、1減算の関数を提供します。%を除き、これらの各関数は引き数として整数か浮動小数を受け取り、浮動小数の引数がある場合は、浮動小数点数をreturnします。
Emacs Lispの算術関数は整数のオーバーフローをチェックしません。したがって(1+
536870911)は-536870912に評価されるかもしれず、それはハードウェアーに依存します。
この関数はnumber-or-marker + 1をreturnします。例えば、
(setq foo 4)
⇒ 4
(1+ foo)
⇒ 5
この関数はCの演算子++とは類似しません —
この関数は変数をインクリメントしません。この関数は和を計算するだけです、したがって以下を続けて評価すると、
foo
⇒ 4
変数をインクリメントしたい場合は、以下のようにsetqを使用しなければなりません:
(setq foo (1+ foo))
⇒ 5
この関数はnumber-or-marker - 1をreturnします。
この関数は引数すべてを加算します。引数を与えない場合、+は0をreturnします。
(+)
⇒ 0
(+ 1)
⇒ 1
(+ 1 2 3 4)
⇒ 10
-関数は2つの目的 — 符号反転と減算
—を果たします。-に1つの引数を与えた場合、値は引数の符号を反転したものになります。複数の引数がある場合、number-or-markerからmore-numbers-or-markersまでの各値を蓄積的に減算します。引数がない場合、結果は0です。
(- 10 1 2 3 4)
⇒ 0
(- 10)
⇒ -10
(-)
⇒ 0
この関数はすべての引数を乗じて、積をreturnします。引数がない場合、*は1をreturnします。
(*)
⇒ 1
(* 1)
⇒ 1
(* 1 2 3 4)
⇒ 24
この関数はdividendをdivisorで除し、商をreturnします。追加の引数divisorsがある場合、その後さらにdividendをdivisorsで順に除します。各引数は数かマーカーです。
すべての引数が整数の場合、結果は各除算の後に商を0へ向かって丸めることにより得られる整数になります。
(/ 6 2)
⇒ 3
(/ 5 2)
⇒ 2
(/ 5.0 2)
⇒ 2.5
(/ 5 2.0)
⇒ 2.5
(/ 5.0 2.0)
⇒ 2.5
(/ 25 3 2)
⇒ 4
(/ -17 6)
⇒ -2
整数を整数0で除すると、Emacsはarith-errorエラー(Errorsを参照してください)をシグナルします。浮動小数の除算においては、0でない数を0で除することにより、正の無限大または負の無限大を得ます(Float Basicsを参照してください)。
この関数は、dividendをdivisorで除した後、その剰余を整数でreturnします。引数は整数かマーカーでなければなりません。
任意の2つの整数dividendとdivisorにたいして、
(+ (% dividend divisor) (* (/ dividend divisor) divisor))
は、divisorが非0の場合は常にdividendと等しくなります。
(% 9 4)
⇒ 1
(% -9 4)
⇒ -1
(% 9 -4)
⇒ 1
(% -9 -4)
⇒ -1
この関数はdividendのdivisorにたいするmodulo、言い換えるとdividendをdivisorで除した後の剰余(ただし符号はdivisorと同じ)えおreturnします。引数は数かマーカーでなければなりません。
%とは異なり、modは浮動小数の引数を許容します。これは商を整数に下方(負の無限大に向かって)へ丸めて、剰余を計算するのにこの商を使用します。
divisorが0のときmodは、両方の引数が整数の場合はarith-errorエラーをシグナルし、それ以外はNaNをreturnします。
(mod 9 4)
⇒ 1
(mod -9 4)
⇒ 3
(mod 9 -4)
⇒ -3
(mod -9 -4)
⇒ -1
(mod 5.5 2.5)
⇒ .5
任意の2つの数dividendとdivisorにたいして、
(+ (mod dividend divisor) (* (floor dividend divisor) divisor))
は常にdividendになります(ただし引数のどちらかが浮動小数の場合は丸め誤差の範囲内で等しく、dividendが整数でdivisorが0の場合はarith-errorとなります)。floorについては、Numeric Conversionsを参照してください。
Next: Rounding Operations, Previous: Numeric Conversions, Up: Numbers [Contents][Index]