Spec-Zone.ru › Elisp

Арифметические операции

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API