我希望能够从单引号中设置案例,但这似乎不可能。
(format nil "The value is: ~a" 'foo)
"The value is: FOO"
(format nil "The value is: ~a" 'FOO)
"The value is: FOO"
(format nil "The value is: ~a" "Foo")
"The value is: Foo"
答案 0 :(得分:11)
<强>引用强>
报价与案件无关。 undefined
会阻止评估。
引用符号:
quote
引用一个清单:
CL-USER 1 > 'foo
FOO
你可以在许多事情面前加上引用。例如,在字符串前面:
CL-USER 2 > '(1 2 3 foo)
(1 2 3 FOO)
由于字符串对自己进行评估,引用或不引用它们没有区别:
CL-USER 3 > '"a b c"
"a b c"
默认情况下,符号读为大写:
CL-USER 4 > "a b c"
"a b c"
但这与引用无关,是阅读器的功能 。
CL-USER 5 > 'FooBar
FOOBAR
CL-USER 6 > (symbol-name 'FooBar)
"FOOBAR"
<强> Downcase 强>
如果您希望字符串为小写,则需要将字符串转换为小写:
CL-USER 7 > (read-from-string "foo")
FOO
3
带大小写混合的符号
但您可以创建小写名称或大小写混合的符号。你需要逃脱它们:
CL-USER 8 > (string-downcase (symbol-name 'FooBar))
"foobar"
使用CL-USER 9 > '|This is a symbol With spaces and mixed case|
|This is a symbol With spaces and mixed case|
CL-USER 10 > 'F\o\oB\a\r
|FooBar|
您还可以告诉FORMAT
以小写字母打印:
FORMAT
答案 1 :(得分:1)
要了解正在发生的事情,请参阅Rainer Joswigs的回答。只需添加一件事:您可以使用*print-case*
控制打印符号的大小写(没有竖线条句法):
CL-USER 1 > (let ((*print-case* :downcase))
(format nil "The value is: ~a" 'foo))
"The value is: foo"
CL-USER 2 > (let ((*print-case* :capitalize))
(format nil "The value is: ~a" 'foo))
"The value is: Foo"
CL-USER 3 > (let ((*print-case* :upcase)) ; default
(format nil "The value is: ~a" 'foo))
"The value is: FOO"
答案 2 :(得分:0)
Lisp符号(如'a
)不区分大小写。您可以通过执行...
(eq 'a 'A)
它们是相同的符号。
如果需要区分大小写,则应根据需要使用字符串或字符。
为了在特定情况下制作format
个符号,您可以set the *print-case*
global variable到:upcase
,:downcase
或:capitalize
,具体取决于您的需求。< / p>
答案 3 :(得分:0)
'foo
表示“抑制符号FOO的评估,仅留下符号FOO”。 Common Lisp默认会提升符号名称(因此表示为'foo
,'Foo
和'FOO
的符号都是相同的符号,符号名称为"FOO"
)。< / p>
要准确了解您的实施内容,您可以通过调用(readtabe-case *readtable*)
来查看当前可读表格see CLHS, ch 23.1.2, effect of readtable case的可读表格。
一些lisp实现将从readtable-case开始为:preserve
。
至于你是否应该使用符号或字符串,它是“它依赖”的其中之一。如果您不担心cse保存,使用实习符号可以减少存储空间并提高比较速度,从而可能(在可能的情况下)进行大量修改。但是,如果情况很重要,那么平衡可能会进一步朝着“使用整个字符串”结束。
答案 4 :(得分:-1)
好的,这有效:
(format nil "The value is: ~a" (string-downcase 'foo))
"The value is: foo"
更好(来自Rainer)
(format nil "The value is: ~(~a~)" 'foo)
我仍然认为不应该使用&f;而不是&#34; foo&#34;如果意图是表示字符串。