2010-07-01 17 views
5

Mam następujący komunikat o błędzie w Common Lisp.Co to | 5E | znaczy w Common Lisp?

Co robi || znaczy w CL?

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

Odpowiedz

10

| foo | to tylko drukowana reprezentacja symboli. 5e nie jest domyślnie odczytywany jako liczba, więc jest symbolem i może być wydrukowany jako | 5E |. Można go również używać do wyświetlania wszystkich symboli w symbolach, w tym białych znaków. | to jest symbol, prawda? | - to jest!

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> 

Należy również zauważyć, że Common Lisp domyślnie używa symboli wielkich liter. Odczytywane symbole będą pisane wielkimi literami. Zatem symbol foo jest odczytywany, a następnie ma nazwę symbolu "FOO". Aby wskazać symbol z małymi lub mieszanymi literami, można użyć | foo |. Jeśli utworzysz małe litery z czymś podobnym (stażysta "foo"), to również zostanie wydrukowane jako | foo |. Jeśli utworzysz paczkę o nazwie symbol z czymś podobnym (stażysta "FOO"), to zostanie wydrukowane jako foo. To jest powód, dla którego 5e drukuje jako | 5E | z wielką literą E.

Jeśli masz symbol, możesz uzyskać jego nazwę jako napis z funkcją SYMBOL-NAME.

Możesz odczytać liczbę całkowitą z ciągu znaków z funkcją PARSE-INTEGER. Ma parametr słowa kluczowego: RADIX, w którym można podać podstawę do czytania.

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

W przeciwnym razie użyj liczb szesnastkowych, takich jak # x5e lub zmień bazę odczytu.

Frank Shearar zwraca uwagę na dokumentację Common Lisp HyperSpec: 2.3.4 Symbols as Tokens.

+1

Sekcja CLHS 2.3.4 opisuje składnię symbolu. –

+0

Dziękuję za wyczerpującą odpowiedź. – jeon

5

Używa tych znaków jako cytatów. Próbuje interpretować 5e jako nazwę zmiennej. Domyślam się, że naprawdę chcesz, aby był interpretowany jako liczba szesnastkowa, więc prawdopodobnie powinien to być #x5e.

+0

Naprawdę chcę interpretować od 5e do # x5e. – jeon

+0

Prawidłowa odpowiedź. –

+0

Dlaczego upadek? – Gabe