Emacs Lisp предоставляет традиционные четыре арифметические операции
(сложение, вычитание, умножение и деление), а также функции
для вычисления остатка и модуля, и функции для прибавления или вычитания 1.
За исключением %, каждая из этих функций принимает как целочисленные,
так и числа с плавающей запятой в качестве аргументов и возвращает число
с плавающей запятой, если хотя бы один аргумент имеет тип с плавающей запятой.
Эта функция возвращает число-или-маркер плюс 1. Например,
(setq foo 4)
⇒ 4
(1+ foo)
⇒ 5
Эта функция не аналогична оператору C ++ — она не
инкрементирует переменную. Она только вычисляет сумму. Таким образом, если продолжить,
foo
⇒ 4
Если вы хотите увеличить значение переменной, вы должны использовать setq,
например так:
(setq foo (1+ foo))
⇒ 5
Эта функция возвращает число-или-маркер минус 1.
Эта функция складывает свои аргументы. Если аргументы не заданы,
+ возвращает 0.
(+)
⇒ 0
(+ 1)
⇒ 1
(+ 1 2 3 4)
⇒ 10
Функция - служит двум целям: отрицанию и вычитанию.
Когда - имеет один аргумент, значением является отрицание этого
аргумента. Если аргументов несколько, - вычитает каждый из
ещё-чисел-или-маркеров из числа-или-маркера
последовательно. Если аргументов нет, результат равен 0.
(- 10 1 2 3 4)
⇒ 0
(- 10)
⇒ -10
(-)
⇒ 0
Эта функция перемножает свои аргументы и возвращает
произведение. Если аргументы не заданы, * возвращает 1.
(*)
⇒ 1
(* 1)
⇒ 1
(* 1 2 3 4)
⇒ 24
С одним или несколькими делителями эта функция делит число последовательно на каждый делитель из делителей и возвращает частное. Без делителей эта функция возвращает 1/число, то есть мультипликативное обратное к числу. Каждый аргумент может быть числом или маркером.
Если все аргументы целые, результат является целым числом, полученным путем округления частного в сторону нуля после каждого деления.
(/ 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
числа с плавающей запятой, деление ненулевого числа с плавающей запятой на ноль
дает положительную или отрицательную бесконечность (см. Основы чисел с плавающей запятой);
в противном случае сигнализируется arith-error, как обычно.
Эта функция возвращает целочисленный остаток от деления делимого на делитель. Аргументы должны быть целыми числами или маркерами.
Для любых двух целых чисел делимого и делителя,
(+ (% делимое делитель) (* (/ делимое делитель) делитель))
всегда равно делимому, если делитель не равен нулю.
(% 9 4)
⇒ 1
(% -9 4)
⇒ -1
(% 9 -4)
⇒ 1
(% -9 -4)
⇒ -1
Эта функция возвращает значение делимого по модулю делителя; другими словами, остаток от деления делимого на делитель, но с тем же знаком, что и делитель. Аргументы должны быть числами или маркерами.
В отличие от %, mod допускает аргументы с плавающей запятой; он
округляет частное вниз (в сторону минус бесконечности) до целого
и использует это частное для вычисления остатка.
Если делитель равен нулю, 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
Для любых двух чисел делимого и делителя,
(+ (mod делимое делитель) (* (floor делимое делитель) делитель))
всегда равно делимому, с учетом ошибки округления, если хотя бы один
аргумент является числом с плавающей запятой, и с ошибкой arith-error, если делимое является целым числом, а делитель равен 0. О floor см. Преобразования чисел.