我有以下形式的ALIST:Common Lisp的符號匹配
((|* bank accounts| (|account 1| |account 2|))
(|* airline miles| (|account 1| |account 2|))
.....
.....)
我也不怎麼用assoc
訪問符號,因爲他們是在兩側框架「|」。
我有以下形式的ALIST: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)
下面是一些更多的例子(與標準讀取器的情況下設置):
(intern "foo bar") => |foo bar|
(intern "Foo") => |Foo|
(intern "FOO") => FOO
可以找到更長的答案on cliki。請參閱Common Lisp Hyperspec中的2.3.4 Symbols as Tokens。
同樣的方式,他們都印:
> (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)
在不逸出,且默認readtable-情況下,讀取符號將大寫:
> 'foo
FOO
但是:
> (intern "1234")
|1234| ;
NIL
> (type-of *)
SYMBOL
> '|foo bar baz|
|foo bar baz|
> (symbol-name *)
"foo bar baz"
它是這樣,讓我......在編譯alist時使用(string-upcase)所有元素來解決它。 – momo