Операторы: Инструменты для вычислений и логики

Больше, чем просто математика, это фундаментальные инструменты для преобразования данных и построения логики. Узнайте, как точно управлять потоком мысли с помощью операторов Lispex.

Эта страница — краткий справочник по встроенным операторам. Примечание: только #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)     ;; Результат: 10

modulo (остаток от деления)

Возвращает остаток от деления первого числа на второе. Требует ровно два аргумента. Псевдоним: % (не рекомендуется; предпочитайте modulo, предупреждение W330).

(modulo 10 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)        ;; Результат: #f

not

Возвращает противоположное логическое значение: для #f#t, иначе — #f.

(not #t)       ;; Результат: #f
(not #f)       ;; Результат: #t
(not 0)        ;; Результат: #f (0 — истинное значение)