Emacs
Lispでは、従来の4つの算術演算(加算、減算、乗算、除算)に加え、剰余関数やモジュロ関数、および1を加算または減算する関数が提供されています。%を除き、これらの関数はいずれも整数と浮動小数点数の両方の引数を受け付け、いずれかの引数が浮動小数点数である場合は浮動小数点数を返します。
この関数は number-or-marker に 1 を加えた値を返します。例えば、
(setq foo 4)
⇒ 4
(1+ foo)
⇒ 5
この関数はC言語の演算子 ++
とは異なり、変数をインクリメントしません。単に和を計算するだけです。したがって、このまま進めると、
foo
⇒ 4
変数をインクリメントしたい場合は、次のように setq(または incf)を使用する必要があります。
(setq foo (1+ foo))
⇒ 5
この関数は number-or-marker から 1 を引いた値を返します。
このマクロは、placeに格納されている数値を1、または指定がある場合はdeltaだけインクリメントします。そして、インクリメント後の値を返します。
place は記号または一般化変数となり得ます。詳細は 一般化変数 を参照してください。例えば、‘(incf i)’ は ‘(setq i (1+ i))’ と等価であり、‘(incf (car x) 2)’ は ‘(setcar x (+ (car x) 2))’ と等価です。
このマクロは、place に格納されている数値を 1 減算します(delta が指定されている場合はその値だけ減算します)。そして、減算後の値を返します。
この関数は、引数を合計します。引数が指定されない場合、+ は 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つ以上ある場合、この関数は number を divisors の各約数で順に割り、その商を返します。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 エラーを報告します(エラー を参照)。IEEE-754
浮動小数点方式を採用しているシステムでは、0 以外の数を 0 で浮動小数点除算すると、正または負の無限大が得られます(浮動小数点の基礎 を参照)。それ以外の場合は、通常通り arith-error が報告されます。
この関数は、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 を法とした値、すなわち dividend を divisor で割った余りを、divisor と同じ符号で返します。引数には数値またはマーカーを指定する必要があります。
% とは異なり、mod
は浮動小数点数の引数を許容します。商を整数方向に切り捨て(負の無限大方向へ)、その商を用いて剰余を計算します。
divisor が 0 の場合、両方の引数が整数であれば mod は 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
については、数値変換 を参照してください。