公共lisp符号匹配

公共lisp符号匹配,lisp,common-lisp,Lisp,Common Lisp,我有一份清单,格式如下: ((|* bank accounts| (|account 1| |account 2|)) (|* airline miles| (|account 1| |account 2|)) ..... .....) 我不知道如何使用assoc访问符号,因为它们的两侧都有“|”框。引用的符号与任何其他符号一样处理,但符号的字符串大小写保持不变: (assoc'| foo bar |'(| baz |.1)(| foo bar |.2))=>(| foo bar |.2

我有一份清单,格式如下:

((|* bank accounts| (|account 1| |account 2|))
 (|* airline miles| (|account 1| |account 2|))
 .....
 .....)

我不知道如何使用
assoc
访问符号,因为它们的两侧都有“|”框。

引用的符号与任何其他符号一样处理,但符号的字符串大小写保持不变:

(assoc'| foo bar |'(| baz |.1)(| foo bar |.2))=>(| foo bar |.2)

以下是更多示例(带有标准的读卡器案例设置):

(实习“foo-bar”)=>foo-bar

(实习“Foo”)=>Foo

(实习“FOO”)=>FOO


可以找到更长的答案。也请参考。

中与打印方式相同的内容:

> (defparameter *alist* 
                '((|* bank accounts| |account 1| |account 2|)
                  (|* airline miles| |account 1| |account 2|)))
*ALIST*
> (cdr (assoc '|* bank accounts| *alist*))  
(|account 1| |account 2|)
> (cdr (assoc '|* airline miles| *alist*))                                             
(|account 1| |account 2|)
竖条只是多个转义字符,允许使用标准读取器不会读取为符号的字符。例如,空格将导致标准读取器语法中的单独符号:

> (read-from-string "foo bar")
FOO ;
4
数字不会产生符号:

> (read-from-string "123 456")
123 ;
4
> (type-of *)
(INTEGER 0 16777215)
如果没有转义和默认的可读取大小写,读取符号将使用大写:

> 'foo
FOO
但是:


正是这个案子让我。。。编译列表时,在所有元素上使用(字符串upcase)可以解决此问题。
> (intern "1234")
|1234| ;
NIL
> (type-of *)
SYMBOL
> '|foo bar baz|
|foo bar baz|
> (symbol-name *)
"foo bar baz"