Lisp 引用围绕其输出的管道-为什么?

Lisp 引用围绕其输出的管道-为什么?,lisp,common-lisp,Lisp,Common Lisp,我已经创建了一个表每日行星,如下所示: (setf daily-planet '((olsen jimmy 123-76-4535 cub-reporter) (kent clark 089-52-6787 reporter) (lane lois 951-26-1438 reporter) (white perry 355-16-7439 editor))) (

我已经创建了一个表
每日行星
,如下所示:

(setf daily-planet '((olsen jimmy 123-76-4535 cub-reporter)
                     (kent  clark 089-52-6787 reporter)
                     (lane  lois  951-26-1438 reporter)
                     (white perry 355-16-7439 editor)))
(mapcar #'caddr daily-planet)
现在我想通过运行
mapcar
提取社会保险号码,如下所示:

(setf daily-planet '((olsen jimmy 123-76-4535 cub-reporter)
                     (kent  clark 089-52-6787 reporter)
                     (lane  lois  951-26-1438 reporter)
                     (white perry 355-16-7439 editor)))
(mapcar #'caddr daily-planet)
结果是:

(|123-76-4535| |089-52-6787| |951-26-1438| |355-16-7439|)
我原以为:

(123-76-4535 089-52-6787 951-26-1438 355-16-7439)
当我试着运行更简单的

'(123-456)
我已经看到,它也被评估为:

(|123-456|)

为什么?

这与评估无关

CL-USER 84 > '123-456-789
|123-456-789|

CL-USER 85 > (type-of '123-456-789)
SYMBOL
123-456-789
是一个符号。打印机可能将其打印为
| 123-456-789 |。
原因:它只有数字和名称中的
-
字符,这使得打印的表示形式成为所谓的潜在数字

管道字符是符号的转义字符。它围绕着符号字符串,这将是符号名称

CL-USER 86 > '|This is a strange symbol with digits, spaces and other characters --- !!!|
|This is a strange symbol with digits, spaces and other characters --- !!!|

CL-USER 87 > (symbol-name *)
"This is a strange symbol with digits, spaces and other characters --- !!!"
出于某种原因,打印机可能认为应该打印
123-456-789
。但符号名称相同:

CL-USER 88 > (eq '123-456 '|123-456|)
T
转义允许符号具有任意名称

一个无用的例子:

CL-USER 89 > (defun |Gravitation nach Einstein| (|Masse in kg|) (list |Masse in kg|))
|Gravitation nach Einstein|

CL-USER 90 > (|Gravitation nach Einstein| 10)
(10)
反斜杠是单个转义符(默认情况下,字符大小写为大写):

旁注:

Common Lisp具有潜在数字的概念。对于各种数字类型有一种数字语法:整数、浮点、比率、复数等等。。。但该标准定义了扩展空间。例如,123-456-789可能在扩展的公共Lisp中有一个数字!当打印机看到一个看起来可能是一个潜在数字的符号时,它会逃逸该符号,以便它可以安全地作为一个符号读回