Lisp - 資料型別



在 LISP 中,變數沒有型別,但資料物件有。

LISP 資料型別可以分為以下幾類。

  • 標量型別 - 例如,數字型別、字元、符號等。

  • 資料結構 - 例如,列表、向量、位向量和字串。

任何變數都可以取任何 LISP 物件作為其值,除非您已明確宣告。

雖然不需要為 LISP 變數指定資料型別,但在某些迴圈擴充套件、方法宣告和其他一些我們將在後續章節中討論的情況下,它會有所幫助。

資料型別按層次結構排列。資料型別是一組 LISP 物件,許多物件可能屬於一個這樣的集合。

typep 謂詞用於查詢物件是否屬於特定型別。

type-of 函式返回給定物件的型別。

LISP 中的型別說明符

型別說明符是系統定義的用於資料型別的符號。

陣列 定點數 簡單字串
原子 浮點數 路徑名 簡單向量
大數 函式 隨機狀態 單精度浮點數
雜湊表 有理數 標準字元
位向量 整數 有理數
字元 關鍵字 讀表 字串
[通用] 列表 序列 [字串字元]
編譯函式 長浮點數 短浮點數 符號
複數 空列表 帶符號位元組
建構函式 空列表 簡單陣列 無符號位元組
雙精度浮點數 數字 簡單位向量 向量

除了這些系統定義的型別之外,您還可以建立自己的資料型別。當使用defstruct函式定義結構型別時,結構型別的名稱將成為一個有效的型別符號。

示例 - 使用標量資料型別

建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼。

main.lisp

; set values to variables
(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)

; print values of variables
(print x)
(print y)
(print n)
(print ch)
(print bg)
(print r)

輸出

當您單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:-

10 
34.567 
123.78 
NIL 
110000.0 
62

示例 - 檢查變數的型別

接下來,讓我們檢查上一個示例中使用的變數的型別。建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼。

main.lisp

; define variables and set values
(defvar x 10)
(defvar y 34.567)
(defvar ch nil)
(defvar n 123.78)
(defvar bg 11.0e+4)
(defvar r 124/2)

; print type of all variables
(print (type-of x))
(print (type-of y))
(print (type-of n))
(print (type-of ch))
(print (type-of bg))
(print (type-of r))

輸出

當您單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:-

(INTEGER 0 281474976710655) 
SINGLE-FLOAT 
SINGLE-FLOAT 
NULL 
SINGLE-FLOAT 
(INTEGER 0 281474976710655)
廣告