LISP - 資料型別


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

LISP資料型別可分類為:

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

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

任何變數都可以採取任何的Lisp物件作為它的值,除非明確地宣告它。

雖然,這是沒有必要指定一個Lisp變數的資料型別,但是,它有助於在一定的迴圈擴充套件,在方法宣告和其他一些情況下,我們將在後面的章節中討論。 

該資料型別被布置成層次結構。資料型別是一組LISP物件和多個物件可能屬於這樣的一套。

typep謂詞用於發現一個物件是否屬於一個特定的型別。

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

在LISP型別說明符

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

array fixnum package simple-string
atom float pathname simple-vector
bignum function random-state single-float
bit hash-table ratio standard-char
bit-vector integer rational stream
character keyword readtable string
[common] list sequence [string-char]
compiled-function long-float short-float symbol
complex nill signed-byte t
cons null simple-array unsigned-byte
double-float number simple-bit-vector vector

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

範例1

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

(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)
(print x)
(print y)
(print n)
(print ch)
(print bg)
(print r)

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:

10 
34.567 
123.78 
NIL 
110000.0 
62

範例2

接下來讓我們看看前面的例子中使用的變數的型別。建立一個名為main.lisp新的原始碼檔案,並在其中輸入如下程式碼:

(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)
(print (type-of x))
(print (type-of y))
(print (type-of n))
(print (type-of ch))
(print (type-of bg))
(print (type-of r))

當您單擊Execute按鈕,或按下Ctrl+ E,LISP立即執行它,返回的結果是:

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