Это предыдущая редакция документации. Актуальные правила арифметики и сравнения описаны в разделе «Числовые процедуры». Другие процедуры можно найти в указателе процедур.
Эта страница кратко описывает встроенные операторы. Примечание: только #f является ложным значением; пустой список () является истинным. Результаты логики записываются как #t/#f.
Арифметические операторы
Эти операторы выполняют стандартные математические вычисления.
+ (Сложение)
Суммирует два или более числа.
- Без аргументов возвращает
0. - С одним аргументом возвращает сам аргумент.
(+ 10 20 5) ;; Результат: 35
(+ 10) ;; Результат: 10
(+) ;; Результат: 0- (Вычитание)
С одним аргументом изменяет знак числа на противоположный. С двумя или более аргументами вычитает последующие числа из первого.
(- 100 20 10) ;; Результат: 70
(- 10) ;; Результат: -10* (Умножение)
Перемножает два или более числа.
- Без аргументов возвращает
1. - С одним аргументом возвращает сам аргумент.
(* 5 10 2) ;; Результат: 100
(* 7) ;; Результат: 7
(*) ;; Результат: 1/ (Деление)
Делит первое число на последующие. Выбрасывает ошибку при делении на ноль.
(/ 100 5 2) ;; Результат: 10modulo (остаток с округлением вниз)
Возвращает остаток от деления первого числа на второе. Знак результата совпадает со знаком делителя. Если нужен результат со знаком делимого, смотрите remainder. Требует ровно два аргумента.
Псевдоним: % (не рекомендуется; предпочитайте modulo, предупреждение W330).
(modulo 10 3) ;; Результат: 1quotient (Деление с усечением)
Делит первое целое на второе с усечением к нулю. Требует ровно два целых аргумента. Выбрасывает ошибку при делении на ноль.
(quotient 7 2) ;; Результат: 3
(quotient -7 2) ;; Результат: -3remainder (Знак делимого)
Возвращает остаток от деления с усечением. Знак результата совпадает со знаком делимого (в отличие от modulo, где знак совпадает со знаком делителя). Выполняется тождество n = d * (quotient n d) + (remainder n d).
(remainder 7 3) ;; Результат: 1
(remainder -7 3) ;; Результат: -1Операторы сравнения
Эти операторы сравнивают значения и возвращают #t или #f.
=, == (Равно)
Проверяет, равны ли два значения. Для списков выполняет глубокое рекурсивное сравнение их элементов. == является псевдонимом для =.
(= 10 10) ;; Результат: #t
(= "hello" "world") ;; Результат: #f
(= (list 1 2) (list 1 2)) ;; Результат: #t!= (Не равно)
Проверяет, не равны ли два значения. Является противоположностью =.
(!= 10 5) ;; Результат: #t
(!= (list 1 2) (list 1 2)) ;; Результат: #f> (Больше)
Проверяет, больше ли первое число, чем второе.
(> 10 5) ;; Результат: #t< (Меньше)
Проверяет, меньше ли первое число, чем второе.
(< 10 5) ;; Результат: #f>= (Больше или равно)
Проверяет, больше ли первое число или равно второму.
(>= 10 10) ;; Результат: #t<= (Меньше или равно)
Проверяет, меньше ли первое число или равно второму.
(<= 10 5) ;; Результат: #fЛогические операторы
Эти операторы работают с булевой логикой и используют сокращённое вычисление.
and
Возвращает #f, как только встречает #f. Если все значения истинны (всё, что не #f), возвращает последнее значение.
(and #t #t) ;; Результат: #t
(and #t #f 10) ;; Результат: #f (останавливается на #f)or
Возвращает первое истинное значение. Если все значения равны #f, возвращает #f.
(or #f 10 #t) ;; Результат: 10 (останавливается на 10)
(or #f #f) ;; Результат: #fnot
Возвращает противоположное логическое значение. Для #f возвращает #t, иначе #f.
(not #t) ;; Результат: #f
(not #f) ;; Результат: #t
(not 0) ;; Результат: #f (0 истинное значение)Сравнение символов
Сравнивает символы по их скалярному значению Unicode (кодовой точке) и образует цепочки переменной длины, как и числовые сравнения. Требуется не менее двух аргументов. Числовые операторы = < > <= >= работают только с числами, поэтому для символов нужны имена с префиксом char: char=? char<? char>? char<=? char>=?.
(char=? #\a #\a) ;; Результат: #t
(char<? #\a #\b #\c) ;; Результат: #t
(char>? #\c #\a) ;; Результат: #t
(char<=? #\a #\a #\b) ;; Результат: #tСравнение символов без учёта регистра
Имена с префиксом char-ci (char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=?) сравнивают символы без учёта регистра, складывая (fold) каждый операнд перед сравнением. Складывание точно для ASCII (так что #\a и #\A равны); несколько не-ASCII символов, чьё складывание регистра Unicode отличается от приведения к нижнему регистру, пока не складываются.
(char-ci=? #\a #\A) ;; Результат: #t
(char-ci<? #\a #\B) ;; Результат: #tСравнение строк
Сравнивает строки лексикографически по скалярному значению Unicode и образует цепочки переменной длины, как и сравнения символов. Требуется не менее двух аргументов. Используйте имена с префиксом string: string=? string<? string>? string<=? string>=?.
(string=? "a" "a") ;; Результат: #t
(string<? "a" "b" "c") ;; Результат: #t
(string>? "b" "a") ;; Результат: #t
(string<=? "a" "a" "b") ;; Результат: #tСравнение строк без учёта регистра
Имена с префиксом string-ci (string-ci=? string-ci<? string-ci>? string-ci<=? string-ci>=?) сравнивают строки без учёта регистра, складывая (fold) каждый операнд перед сравнением. Складывание точно для ASCII (так что "abc" и "ABC" равны); несколько не-ASCII символов, чьё складывание регистра Unicode отличается от приведения к нижнему регистру, пока не складываются.
(string-ci=? "abc" "ABC") ;; Результат: #t
(string-ci<? "abc" "ABD") ;; Результат: #tОкругление
Округляют число до целого, сохраняя точность (точное число даёт точное целое, неточное даёт неточное целое). round использует банковское округление (к ближайшему чётному), поэтому (round 5/2) равно 2, а (round 2.5) равно 2.0, а не 3. floor округляет к минус бесконечности, ceiling к плюс бесконечности, truncate к нулю.
(floor 7/2) ;; Результат: 3
(ceiling 7/2) ;; Результат: 4
(truncate -7/2) ;; Результат: -3
(round 5/2) ;; Результат: 2
(round 2.5) ;; Результат: 2.0НОД и НОК
gcd возвращает наибольший общий делитель, а lcm возвращает наименьшее общее кратное нуля или более целых чисел. Обе функции переменной арности и всегда возвращают неотрицательное целое. (gcd) равно 0, а (lcm) равно 1.
(gcd 12 8) ;; Результат: 4
(gcd 12 -8) ;; Результат: 4
(lcm 4 6) ;; Результат: 12
(lcm 4 0) ;; Результат: 0Возведение в степень
expt возводит основание в целую степень. Показатель должен быть точным целым числом. Отрицательный показатель даёт точную обратную величину, а неточное основание даёт неточный результат. (Возведение в нецелую степень, требующее трансцендентной математики, не поддерживается.)
(expt 2 10) ;; Результат: 1024
(expt 2 -2) ;; Результат: 1/4
(expt 2.0 3) ;; Результат: 8.0