私は次の形式のリストを持っています:
((|* bank accounts| (|account 1| |account 2|))
(|* airline miles| (|account 1| |account 2|))
.....
.....)
assoc
シンボルの両側が「|」で囲まれているため、シンボルへのアクセス方法は使用しません。
私は次の形式のリストを持っています:
((|* 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
より長い答えはclikiで見つけることができます。CommonLispHyperspecのトークンとしての2.3.4シンボルも参照してください。
それらが印刷されるのと同じ方法:
> (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-caseを使用しない場合、読み取られる記号は大文字になります。
> 'foo
FOO
だが:
> (intern "1234")
|1234| ;
NIL
> (type-of *)
SYMBOL
> '|foo bar baz|
|foo bar baz|
> (symbol-name *)
"foo bar baz"