2010-07-01 76 views

回答

10

| foo |只是符號的印刷表示。 5e默認不讀爲數字,所以它是一個符號,可以打印爲| 5E |。我們也可以使用它來在符號中包含各種字符,包括空格。 |這是一個符號,不是嗎?| - 它是!

CL-USER > (describe '|this is a symbol, isn't it?|) 

|this is a symbol, isn't it?| is a SYMBOL 
NAME   "this is a symbol, isn't it?" 
VALUE   #<unbound value> 
FUNCTION  #<unbound function> 
PLIST   NIL 
PACKAGE  #<The COMMON-LISP-USER package, 798/1024 internal, 0/4 external> 

還要注意,Common Lisp默認使用大寫符號。讀取的符號將被大寫。所以符號foo被讀取,然後有一個符號名稱「FOO」。要表示小寫或混合大小寫字母的符號,可以使用| foo |。如果你用類似於(intern「foo」)的東西創建一個小寫符號,那麼它也會被打印爲| foo |。如果您創建一個帶有類似於(intern「FOO」)的uppcase命名符號,則它將被打印爲foo。這就是5e打印爲| 5E |的原因用大寫字母E.

如果您有符號,可以使用SYMBOL-NAME函數將其名稱作爲字符串獲取。

您可以使用PARSE-INTEGER函數從字符串中讀取一個整數。它有一個關鍵字參數:RADIX,您可以在其中提供讀數的基數。

CL-USER > (parse-integer (symbol-name '5e) :radix 16) 
94 

否則使用#x5e等十六進制數字或更改讀取基數。

Frank Shearar指出Common Lisp HyperSpec中的文檔:2.3.4 Symbols as Tokens

+1

CLHS第2.3.4節描述符號的語法。 – 2010-07-01 07:06:56

+0

非常感謝您的詳細回覆。 – jeon 2010-07-02 05:41:59

5

它使用這些字符作爲引號。它試圖將5e解釋爲變量的名稱。我的猜測是,你真的希望它把它解釋爲一個十六進制數,所以它可能應該是#x5e

+0

我真的想從5e翻譯到#x5e。 – jeon 2010-07-01 05:32:20

+0

正確答案。 – 2010-07-01 07:22:16

+0

爲什麼downvote? – Gabe 2010-07-01 16:39:42