2013-09-01 68 views
3

基本上我會說,你將不得不使用(typep var 'string-type),但沒有這樣的類型的字符串,據我知道。如何我檢查給定的變量值是否爲字符串類型

通過結果類型的確定一個類型

(type-of "rowrowrowyourboat") 
> (SIMPLE-ARRAY CHARACTER (17)) 

其耐寒型我可以在一個通用的方式尋找爲尋找剛SIMPLE-ARRAY不會做任何好處:

(typep "rowrowrowyourboat" 'simple-array) 
> t 

(typep (make-array 1) 'simple-array) 
> t 

並且使用直觀的動態確定示例字符串的類型的方法並沒有做任何好處,因爲它們將不具有相同的長度(大部分時間)

(typep "rowrowrowyourboat" (type-of "string")) 
> nil 

所以我不知道什麼是檢查一個給定的變量是否爲字符串類型的典型方式是什麼?

回答

7

大多數類型在CL謂詞,甚至一個字符串是否存在一個函數,stringp,這不正是你想要的字符序列。

(stringp "getlydownthestream") ; ==> T 

它說,在文檔中,這將是相同的書寫

(typep "ifyouseeacrocodile" 'string) ; ==> T 
4

你的問題有一些誤解。通常在Lisp變量中沒有類型。

重複:變量在Lisp中沒有類型

你可以問,如果一些Lisp的值是某種類型或何種類型它有。 Lisp對象有附加的類型。

Common Lisp的沒有類型 '字符串'?你爲什麼不看看文檔?這很容易。

Common Lisp的HyperSpec:http://www.lispworks.com/documentation/HyperSpec/Front/index.htm

符號索引:http://www.lispworks.com/documentation/HyperSpec/Front/X_Symbol.htm

符號索引爲S:http://www.lispworks.com/documentation/HyperSpec/Front/X_Alph_S.htm

STRING:http://www.lispworks.com/documentation/HyperSpec/Body/a_string.htm#string

系統類字符串:http://www.lispworks.com/documentation/HyperSpec/Body/t_string.htm

所以Common Lisp的有一個類型STRING

Strings Dictionary還列出了其他字符串類型:BASE-STRING,SIMPLE-STRING,SIMPLE-BASE-STRING

我使用LispWorks,所以返回的類型看起來有點不同:

CL-USER 20 > (type-of "foo") 
SIMPLE-BASE-STRING 

CL-USER 21 > (typep "foo" 'string) 
T 

CL-USER 22 > (stringp "foo") 
T 

CL-USER 23 > (subtypep 'simple-base-string 'string) 
T 
T 

CL-USER 24 > (let ((var "foo")) (typep var 'string)) 
T 

揭祕:Common Lisp中的變量可以打字,但這是另一回事。

+2

我的意思是(當然)變量的值 - 將更正 – Sim

相關問題