2010-07-01 12 views
5

Ich habe folgende Fehlermeldung in Common Lisp erhalten.Was macht | 5E | gemein in Lisp?

Was bedeutet || gemein in CL?

CL-USER> (write-to-string 5e) 
The variable |5E| is unbound. 
    [Condition of type UNBOUND-VARIABLE] 

Antwort

10

| foo | ist nur eine gedruckte Darstellung für Symbole. 5e liest nicht standardmäßig als Zahl, es ist also ein Symbol und kann als | 5E | gedruckt werden. Man kann es auch verwenden, um alle Arten von Zeichen in Symbolen zu haben, einschließlich Leerzeichen. | Das ist ein Symbol, nicht wahr? | - es ist!

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> 

Beachten Sie auch, dass Common Lisp standardmäßig Großbuchstaben verwendet. Die gelesenen Symbole werden in Großbuchstaben angezeigt. Also wird das Symbol foo gelesen und hat dann einen Symbolnamen "FOO". Um ein Symbol mit Klein- oder Großbuchstaben zu bezeichnen, kann | foo | verwendet werden. Wenn Sie ein kleines Symbol mit (zB "foo") erstellen, wird es auch als | foo | gedruckt. Wenn Sie ein Uppcase-benanntes Symbol mit etwas wie (intern "FOO") erstellen, wird es als foo gedruckt. Aus diesem Grund druckt 5e als | 5E | mit einem Großbuchstaben E.

Wenn Sie ein Symbol haben, können Sie seinen Namen als String mit der Funktion SYMBOL-NAME erhalten.

Mit der Funktion PARSE-INTEGER können Sie eine ganze Zahl aus einem String lesen. Es hat einen Schlüsselwortparameter: RADIX, wo Sie die Radix zum Lesen bereitstellen können.

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

Andernfalls verwenden Sie Hex-Zahlen wie # x5e oder ändern Sie die Lesebasis.

Frank Shearar weist auf die Dokumentation in Common Lisp HyperSpec hin: 2.3.4 Symbols as Tokens.

+1

CLHS Abschnitt 2.3.4 beschreibt die Syntax eines Symbols. –

+0

Vielen Dank für Ihre ausführliche Antwort. – jeon

5

Es verwendet diese Zeichen als Anführungszeichen. Es versucht 5e als Namen einer Variablen zu interpretieren. Meine Vermutung ist, dass Sie es wirklich als Hex-Zahl interpretieren möchten, also sollte es wahrscheinlich #x5e sein.

+0

Ich möchte wirklich von 5e zu # x5e interpretieren. – jeon

+0

Richtige Antwort. –

+0

Warum der Downvote? – Gabe