Оператор — это символ, который указывает компилятору выполнять определенные математические или логические манипуляции. LISP допускает многочисленные операции с данными, поддерживаемые различными функциями, макросами и другими конструкциями.
Операции, разрешенные для данных, могут быть классифицированы как —
- Арифметические операции
- Операции сравнения
- Логические Операции
- Побитовые операции
Арифметические операции
В следующей таблице показаны все арифметические операторы, поддерживаемые LISP. Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда —
оператор | Описание | пример |
---|---|---|
+ | Добавляет два операнда | (+ AB) даст 30 |
— | Вычитает второй операнд из первого | (- АБ) даст -10 |
* | Умножает оба операнда | (* AB) даст 200 |
/ | Делит числитель на числитель | (/ BA) даст 2 |
мод, рем | Оператор модуля и остаток от целочисленного деления | (мод БА) даст 0 |
INCF | Оператор приращений увеличивает целочисленное значение на второй указанный аргумент | (включая А 3) даст 13 |
DECF | Оператор decrements уменьшает целочисленное значение на второй указанный аргумент | (decf A 4) даст 9 |
Операции сравнения
Следующая таблица показывает все реляционные операторы, поддерживаемые LISP, который сравнивает числа. Однако, в отличие от реляционных операторов в других языках, операторы сравнения LISP могут принимать более двух операндов и работают только с числами.
Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда —
оператор | Описание | пример |
---|---|---|
знак равно | Проверяет, равны ли все значения операндов или нет, если да, тогда условие становится истинным. | (= AB) не соответствует действительности. |
знак равно | Проверяет, все ли значения операндов различны или нет, если значения не равны, условие становится истинным. | (/ = AB) верно. |
> | Проверяет, монотонно ли уменьшаются значения операндов. | (> AB) не соответствует действительности. |
< | Проверяет, монотонно ли увеличиваются значения операндов. | (<AB) верно. |
> = | Проверяет, является ли значение любого левого операнда больше или равно значению следующего правого операнда, если да, тогда условие становится истинным. | (> = AB) не соответствует действительности. |
<= | Проверяет, является ли значение любого левого операнда меньше или равно значению его правого операнда, если да, тогда условие становится истинным. | (<= AB) верно. |
Максимум | Он сравнивает два или более аргумента и возвращает максимальное значение. | (максимум AB) возвращает 20 |
мин | Он сравнивает два или более аргумента и возвращает минимальное значение. | (мин. АВ) возвращает 10 |
Логические операции над логическими значениями
Common LISP предоставляет три логических оператора: и, или, и не, который работает с логическими значениями. Предположим, что A имеет значение nil, а B имеет значение 5, тогда —
оператор | Описание | пример |
---|---|---|
а также | Требуется любое количество аргументов. Аргументы оцениваются слева направо. Если все аргументы имеют значение, отличное от nil, возвращается значение последнего аргумента. В противном случае возвращается ноль. | (и AB) вернет NIL. |
или же | Требуется любое количество аргументов. Аргументы оцениваются слева направо до тех пор, пока один из них не станет нулевым, в этом случае возвращается значение аргумента, в противном случае возвращается ноль . | (или AB) вернется 5. |
не | Он принимает один аргумент и возвращает t, если аргумент оценивается как ноль. | (не А) вернет Т. |
Побитовые операции над числами
Битовые операторы работают с битами и выполняют побитовые операции. Таблицы истинности для побитовых операций и, или, и операций xor следующие:
п | Q | р и д | р или д | р х или д |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
Assume if A = 60; and B = 13; now in binary format they will be as follows: A = 0011 1100 B = 0000 1101 ----------------- A and B = 0000 1100 A or B = 0011 1101 A xor B = 0011 0001 not A = 1100 0011
Побитовые операторы, поддерживаемые LISP, перечислены в следующей таблице. Предположим, что переменная A содержит 60, а переменная B содержит 13, тогда —