在LISP中,變數沒有型別的,但有資料物件。
LISP資料型別可分類為:
標量型別 - 例如,數位型別,字元,符號等。
資料結構 - 例如,列表,向量,位元向量和字串。
任何變數都可以採取任何的Lisp物件作為它的值,除非明確地宣告它。
雖然,這是沒有必要指定一個Lisp變數的資料型別,但是,它有助於在一定的迴圈擴充套件,在方法宣告和其他一些情況下,我們將在後面的章節中討論。
該資料型別被布置成層次結構。資料型別是一組LISP物件和多個物件可能屬於這樣的一套。
typep謂詞用於發現一個物件是否屬於一個特定的型別。
type-of函式,返回給定物件的資料型別的型別。
型別說明符是資料型別的系統定義的符號。
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)