Арифметические операции
Emacs Lisp предоставляет традиционные четыре арифметические операции (сложение, вычитание, умножение и деление), а также функции для нахождения остатка и модуля, и функции для добавления или вычитания 1. За исключением %, каждая из этих функций принимает целые и числа с плавающей запятой в качестве аргументов и возвращает число с плавающей запятой, если хотя бы один из аргументов является числом с плавающей запятой.
- Функция: 1+ число-или-метка
-
Эта функция возвращает число-или-метка плюс 1. Например,
(setq foo 4) ⇒ 4 (1+ foo) ⇒ 5Эта функция не аналогична оператору C
++— она не инкрементирует переменную. Она просто вычисляет сумму. Таким образом, если мы продолжим,foo ⇒ 4Если вы хотите инкрементировать переменную, вы должны использовать
setq, как показано ниже:(setq foo (1+ foo)) ⇒ 5
- Функция: 1- число-или-метка
Эта функция возвращает число-или-метка минус 1.
- Функция: + &rest числа-или-метки
-
Эта функция складывает свои аргументы. Если функция не получает аргументов,
+возвращает 0.(+) ⇒ 0 (+ 1) ⇒ 1 (+ 1 2 3 4) ⇒ 10
- Функция: - &optional число-или-метка &rest дополнительные-числа-или-метки
-
Функция
-выполняет две функции: отрицание и вычитание. Если у-один аргумент, значение является отрицанием аргумента. Если есть несколько аргументов,-вычитает каждый из дополнительные-числа-или-метки из число-или-метка кумулятивно. Если нет аргументов, результат равен 0.(- 10 1 2 3 4) ⇒ 0 (- 10) ⇒ -10 (-) ⇒ 0
- Функция: * &rest числа-или-метки
-
Эта функция перемножает свои аргументы и возвращает произведение. Если функция не получает аргументов,
*возвращает 1.(*) ⇒ 1 (* 1) ⇒ 1 (* 1 2 3 4) ⇒ 24
- Функция: / число &rest делители
-
При одном или нескольких делителях эта функция делит число на каждый делитель по очереди и возвращает частное. При отсутствии делителей эта функция возвращает 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Если вы делите целое число на ноль, Emacs выводит ошибку
arith-error(см. Ошибки). При делении числа с плавающей запятой на ноль получается положительная или отрицательная бесконечность (см. Основы чисел с плавающей запятой).
- Функция: % делимое делитель
-
Эта функция возвращает целое число остаток от деления делимого на делитель. Аргументы должны быть целыми числами или метками.
Для любых двух целых чисел делимое и делитель,
(+ (% dividend divisor) (* (/ dividend divisor) divisor))
всегда равно делимое, если делитель не равен нулю.
(% 9 4) ⇒ 1 (% -9 4) ⇒ -1 (% 9 -4) ⇒ 1 (% -9 -4) ⇒ -1
- Функция: mod делимое делитель
-
Эта функция возвращает значение делимое по модулю делитель; другими словами, остаток от деления делимое на делитель, но со знаком делитель. Аргументы должны быть числами или метками.
В отличие от
%,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 dividend divisor) (* (floor dividend divisor) divisor))
всегда равно делимое, с учётом погрешности округления, если один из аргументов является числом с плавающей запятой, и до ошибки
arith-error, если делимое является целым числом, а делитель равен 0. Дляfloor, см. Числовые преобразования.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Arithmetic-Operations.html