LISP-演算子
演算子は、特定の数学的または論理的操作を実行するようにコンパイラーに指示する記号です。LISPは、さまざまな関数、マクロ、その他の構造によってサポートされている、データに対する多数の操作を可能にします。
データに対して許可される操作は、次のように分類できます。
- 算術演算
- 比較演算
- 論理演算
- ビット演算
算術演算
次の表は、LISPでサポートされているすべての算術演算子を示しています。変数を想定A 10と変数を保持します B 20を保持します-
Show Examples
オペレーター | 説明 | 例 |
---|---|---|
+ | 2つのオペランドを追加します | (+ AB)は30を与えます |
- | 最初のオペランドから2番目のオペランドを減算します | (-AB)は-10を与えます |
* | 両方のオペランドを乗算します | (* AB)は200を与えます |
/ | 分子を分子で割る | (/ BA)は2を与えます |
mod、rem | モジュラス演算子と整数除算後の余り | (mod BA)は0を与えます |
incf | インクリメント演算子は、指定された2番目の引数だけ整数値を増やします | (incf A 3)は13を与えます |
decf | デクリメント演算子は、指定された2番目の引数だけ整数値を減らします | (decf A 4)は9を与えます |
比較演算
次の表は、数値を比較するLISPでサポートされているすべての関係演算子を示しています。ただし、他の言語の関係演算子とは異なり、LISP比較演算子は3つ以上のオペランドを取り、数値に対してのみ機能します。
変数を想定 A 10と変数を保持します B 20を保持し、次に−
Show Examples
オペレーター | 説明 | 例 |
---|---|---|
= | オペランドの値がすべて等しいかどうかをチェックし、等しい場合は条件が真になります。 | (= AB)は正しくありません。 |
/ = | オペランドの値がすべて異なるかどうかをチェックし、値が等しくない場合は条件が真になります。 | (/ = AB)は真です。 |
>> | オペランドの値が単調に減少しているかどうかを確認します。 | (> AB)は正しくありません。 |
< | オペランドの値が単調に増加しているかどうかを確認します。 | (<AB)は真です。 |
> = | 左のオペランドの値が次の右のオペランドの値以上であるかどうかを確認します。はいの場合、条件は真になります。 | (> = AB)は正しくありません。 |
<= | 左側のオペランドの値が右側のオペランドの値以下であるかどうかを確認します。そうである場合は、条件が真になります。 | (<= AB)は真です。 |
最大 | 2つ以上の引数を比較し、最大値を返します。 | (最大AB)は20を返します |
分 | 2つ以上の引数を比較し、最小値を返します。 | (最小AB)は10を返します |
ブール値の論理演算
Common LISPは、次の3つの論理演算子を提供します。 and, or, そして notブール値で動作します。仮定するA 値がnilであり、 B 値が5の場合、-
Show Examples
オペレーター | 説明 | 例 |
---|---|---|
そして | 任意の数の引数を取ります。引数は左から右に評価されます。すべての引数がnil以外と評価された場合、最後の引数の値が返されます。それ以外の場合はnilが返されます。 | (およびAB)はNILを返します。 |
または | 任意の数の引数を取ります。引数は、nil以外と評価されるまで左から右に評価されます。その場合、引数値が返されます。それ以外の場合は、nil。 | (またはAB)は5を返します。 |
ない | 1つの引数を取り、 t 引数が次のように評価される場合 nil. | (Aではなく)Tを返します。 |
数値のビット演算
ビット単位の演算子はビットを処理し、ビットごとの演算を実行します。ビットごとのand、or、およびxor演算の真理値表は次のとおりです。
Show Examples
p | q | pとq | pまたはq | p 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を保持し、次に−
オペレーター | 説明 | 例 |
---|---|---|
logand | これにより、引数のビット単位の論理ANDが返されます。引数が指定されていない場合、結果は-1になります。これは、この操作のIDです。 | (logand ab))は12を与えます |
logior | これにより、引数のビット単位の論理INCLUSIVEORが返されます。引数が指定されていない場合、結果はゼロになります。これは、この操作のIDです。 | (logior ab)は61を与えます |
logxor | これは、引数のビット単位の論理排他的論理和を返します。引数が指定されていない場合、結果はゼロになります。これは、この操作のIDです。 | (logxor ab)は49を与えます |
lognor | これは、引数のビット単位のNOTを返します。引数が指定されていない場合、結果は-1になります。これは、この操作のIDです。 | (lognor ab)は-62を与えます、 |
logeqv | これにより、引数のビット単位の論理等価性(排他的norとも呼ばれます)が返されます。引数が指定されていない場合、結果は-1になります。これは、この操作のIDです。 | (logeqv ab)は-50を与えます |