
- LISP 教程
- LISP - 首頁
- LISP - 概述
- LISP - 環境
- LISP - 程式結構
- LISP - 基本語法
- LISP - 資料型別
- LISP - 宏
- LISP - 變數
- LISP - 常量
- LISP - 運算子
- LISP - 決策
- LISP - 迴圈
- LISP - 函式
- LISP - 謂詞
- LISP - 數字
- LISP - 字元
- LISP - 陣列
- LISP - 字串
- LISP - 序列
- LISP - 列表
- LISP - 符號
- LISP - 向量
- LISP - 集合
- LISP - 樹
- LISP - 雜湊表
- LISP - 輸入與輸出
- LISP - 檔案 I/O
- LISP - 結構
- LISP - 包
- LISP - 錯誤處理
- LISP - CLOS
- LISP 有用資源
- Lisp - 快速指南
- Lisp - 有用資源
- Lisp - 討論
Lisp - 運算子
運算子是一個符號,它告訴編譯器執行特定的數學或邏輯操作。LISP 允許對資料進行大量操作,並由各種函式、宏和其他構造支援。
允許對資料進行的操作可以歸類為:
- 算術運算
- 比較運算
- 邏輯運算
- 按位運算
算術運算
下表顯示了 LISP 支援的所有算術運算子。假設變數A儲存 10,變數B儲存 20,則:
運算子 | 描述 | 示例 |
---|---|---|
+ | 將兩個運算元相加 | (+A B) 將得到 30 |
- | 從第一個運算元中減去第二個運算元 | (- A B) 將得到 -10 |
* | 將兩個運算元相乘 | (* A B) 將得到 200 |
/ | 將分子除以分母 | (/ B A) 將得到 2 |
mod,rem | 模運算子和整數除法後的餘數 | (mod B A )將得到 0 |
incf | 增量運算子將整數值增加指定第二個引數 | (incf A 3) 將得到 13 |
decf | 減量運算子將整數值減少指定第二個引數 | (decf A 4) 將得到 9 |
比較運算
下表顯示了 LISP 支援的所有關係運算符,它們比較數字之間的大小。但是,與其他語言中的關係運算符不同,LISP 比較運算子可以接受兩個以上的運算元,並且它們僅適用於數字。
假設變數A儲存 10,變數B儲存 20,則:
運算子 | 描述 | 示例 |
---|---|---|
= | 檢查運算元的值是否都相等,如果相等,則條件為真。 | (= A B) 為假。 |
/= | 檢查運算元的值是否都不相等,如果值不相等,則條件為真。 | (/= A B) 為真。 |
> | 檢查運算元的值是否單調遞減。 | (> A B) 為假。 |
< | 檢查運算元的值是否單調遞增。 | (< A B) 為真。 |
>= | 檢查任何左側運算元的值是否大於或等於下一個右側運算元的值,如果大於或等於,則條件為真。 | (>= A B) 為假。 |
<= | 檢查任何左側運算元的值是否小於或等於其右側運算元的值,如果小於或等於,則條件為真。 | (<= A B) 為真。 |
max | 它比較兩個或多個引數,並返回最大值。 | (max A B) 返回 20 |
min | 它比較兩個或多個引數,並返回最小值。 | (min A B) 返回 10 |
布林值上的邏輯運算
Common LISP 提供三個邏輯運算子:and、or 和 not,它們對布林值進行操作。假設A的值為 nil,B的值為 5,則:
運算子 | 描述 | 示例 |
---|---|---|
and | 它接受任意數量的引數。引數從左到右求值。如果所有引數都求值為非 nil,則返回最後一個引數的值。否則返回 nil。 | (and A B) 將返回 NIL。 |
or | 它接受任意數量的引數。引數從左到右求值,直到一個引數求值為非 nil,在這種情況下,返回該引數的值,否則返回nil。 | (or A B) 將返回 5。 |
not | 它接受一個引數,如果引數求值為nil,則返回t。 | (not A) 將返回 T。 |
數字上的按位運算
按位運算子作用於位,並執行逐位運算。按位與、或和異或運算的真值表如下所示:
p | q | p and q | p or 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 | 這將返回其引數的按位邏輯與。如果沒有給出引數,則結果為 -1,這是此運算的單位元。 | (logand a b)) 將得到 12 |
logior | 這將返回其引數的按位邏輯包含或。如果沒有給出引數,則結果為零,這是此運算的單位元。 | (logior a b) 將得到 61 |
logxor | 這將返回其引數的按位邏輯異或。如果沒有給出引數,則結果為零,這是此運算的單位元。 | (logxor a b) 將得到 49 |
lognor | 這將返回其引數的按位非。如果沒有給出引數,則結果為 -1,這是此運算的單位元。 | (lognor a b) 將得到 -62, |
logeqv | 這將返回其引數的按位邏輯等價(也稱為異或非)。如果沒有給出引數,則結果為 -1,這是此運算的單位元。 | (logeqv a b) 將得到 -50 |
廣告