J'ai reçu un message d'erreur suivant dans Common Lisp.Qu'est-ce que | 5E | signifie en Lisp commun?
Qu'est-ce que || signifie en CL?
CL-USER> (write-to-string 5e)
The variable |5E| is unbound.
[Condition of type UNBOUND-VARIABLE]
J'ai reçu un message d'erreur suivant dans Common Lisp.Qu'est-ce que | 5E | signifie en Lisp commun?
Qu'est-ce que || signifie en CL?
CL-USER> (write-to-string 5e)
The variable |5E| is unbound.
[Condition of type UNBOUND-VARIABLE]
| foo | est juste une représentation imprimée pour les symboles. 5e ne se lit pas comme un nombre par défaut, donc c'est un symbole et peut être imprimé comme | 5E |. On peut l'utiliser aussi pour avoir toutes sortes de caractères dans les symboles, y compris les espaces. c'est un symbole, n'est-ce pas? - c'est!
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>
Notez également que Common Lisp utilise des symboles majuscules par défaut. Les symboles lus seront mis en majuscule. Donc, le symbole foo est lu et a ensuite un nom de symbole "FOO". Pour désigner un symbole avec des minuscules ou des majuscules, on peut utiliser | foo |. Si vous créez un symbole en minuscule avec quelque chose comme (intern "foo"), il sera également imprimé comme | foo |. Si vous créez un symbole nommé uppcase avec quelque chose comme (intern "FOO"), alors il sera imprimé comme foo. C'est la raison pour laquelle 5e s'imprime sous | 5E | avec une majuscule E.
Si vous avez un symbole, vous pouvez obtenir son nom en tant que chaîne avec la fonction SYMBOL-NAME.
Vous pouvez lire un entier à partir d'une chaîne avec la fonction PARSE-INTEGER. Il a un paramètre de mot-clé: RADIX, où vous pouvez fournir la base pour la lecture.
CL-USER > (parse-integer (symbol-name '5e) :radix 16)
94
Sinon, utilisez des nombres hexadécimaux comme # x5e ou changez la base de lecture. Frank Shearar indique la documentation dans CommonSpik HyperSpec: 2.3.4 Symbols as Tokens.
Il utilise ces caractères comme des guillemets. Il essaie d'interpréter 5e
comme le nom d'une variable. Je suppose que vous voulez vraiment l'interpréter comme un nombre hexadécimal, donc il devrait probablement être #x5e
.
La section CLHS 2.3.4 décrit la syntaxe d'un symbole. –
Merci pour votre réponse élaborée. – jeon