Emacs
Lispは伝統的な4つの算術演算(加減乗除)、同様に剰余とmodulusの関数、および1の加算と減算を行う関数を提供します。%
を除き、これらの各関数は引き数として整数か浮動小数を受け取り、浮動小数の引数がある場合は浮動小数点数をリターンします。
この関数はnumber-or-marker + 1をリターンする。例えば、
(setq foo 4) ⇒ 4 (1+ foo) ⇒ 5
この関数はCの演算子++
とは異なり、変数をインクリメントしない。この関数は和を計算するだけである。したがって以下を続けて評価すると、
foo ⇒ 4
変数をインクリメントしたい場合は、以下のようにsetq
を使用しなければならない:
(setq foo (1+ foo)) ⇒ 5
この関数はnumber-or-marker - 1をリターンする。
この関数は引数すべてを加算する。引数を与えないと+
は0をリターンする。
(+) ⇒ 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
この関数はすべての引数を乗じて積をリターンする。引数がなかれば*
は1をリターンする。
(*) ⇒ 1 (* 1) ⇒ 1 (* 1 2 3 4) ⇒ 24
divisorsが1つ以上ならこの関数はdivisors内の除数で順にnumberを除して、その商をリターンする。divisorsがなければ、この関数は1/number、つまりnumberの逆数をリターンする。各引数には数かマーカーを指定できる。
すべての引数が整数なら、結果は各除算の後に商を0へ向かって丸めることにより得られる整数となる。
(/ 6 2) ⇒ 3
(/ 5 2) ⇒ 2
(/ 5.0 2) ⇒ 2.5
(/ 5 2.0) ⇒ 2.5
(/ 5.0 2.0) ⇒ 2.5
(/ 4.0) ⇒ 0.25
(/ 4) ⇒ 0
(/ 25 3 2) ⇒ 4
(/ -17 6) ⇒ -2
整数を整数0で除するとEmacsはarith-error
エラー(エラーを参照)をシグナルする。浮動小数点数の除算では、非0の数を0で除することで正の無限大または負の無限大を得る(浮動小数点数の基礎を参照)。
この関数はdividendをdivisorで除した後、その剰余を整数でリターンする。引数は整数かマーカーでなければならない。
任意の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と同じ)をリターンする。引数は数かマーカーでなければならない。
%
とは異なりmod
は浮動小数の引数を許す。これは商を整数に下方(負の無限大に向かって)へ丸めて剰余を計算するのにこの商を使用する。
mod
はdivisorが0のとき、両方の引数が整数ならarith-error
エラーをシグナルし、それ以外はNaNをリターンする。
(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
については、数値の変換を参照のこと。