2

私は次の形式のリストを持っています:

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

assocシンボルの両側が「|」で囲まれているため、シンボルへのアクセス方法は使用しません。

4

2 に答える 2

11

引用符で囲まれた記号は他の記号と同じように扱われますが、記号の大文字と小文字は保持されます。

(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シンボルも参照してください。

于 2012-09-14T09:38:14.767 に答える
3

それらが印刷されるのと同じ方法:

> (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"
于 2012-09-14T09:42:48.573 に答える