我有隊列名稱的形式如下列表:如何創建點對與零
'("foo" "bar")
我試圖存儲隊列爲下列方式assoc命令列表:
'(("foo" . nil) ("bar" . nil))
基本上它是一個隊列「foo」和「bar」的關聯列表,它們目前是空的。當Bob和Alice將在「foo」隊列中時,它應該如下所示。
'(("foo" . ("alice" "bob")) ("bar" . nil))
如何創建此結構?我試圖通過寫作來實現這一目標:
(mapcar #'(lambda (x) (cons x ''nil)) '("foo" "bar"))
其返回
'(("foo" QUOTE NIL) ("bar" QUOTE NIL))
這可能不是我想要的,因爲當我試圖把鮑勃的「富」排隊不爲工作
我想了。
* (setf *tmp* '(("foo" . 'nil) ("bar" . 'nil)))
(("foo" QUOTE NIL) ("bar" QUOTE NIL))
* (push "bob" (caddr (assoc "foo" *tmp* :test #'string=)))
* *tmp*
(("foo" QUOTE ("bob")) ("bar" QUOTE NIL))
如何在點後面創建帶空列表的虛線對?
編輯: 其實當我存儲這樣的關聯列表作爲類插槽它看起來很好。
* (describe myClassInstance)
;; ...
QUEUES = (("foo" . 'NIL) ("bar" . 'NIL))
;; ...
但是,在將Bob添加到「foo」隊列後,所有隊列都正在更改。
* (push "bob" (caddr (assoc "foo" (slot-value myClassInstance 'testClass::queues) :test #'string=))))
* (describe myClassInstance)
;; ...
QUEUES = (("foo" . '("bob") ("bar" . '("bob"))
;; ...
這裏發生了什麼?它看起來像所有隊列中的cdr
部分是單個符號,當我在一個位置(「foo」隊列)中更改它的值時,它在所有地方(所有隊列)中都發生了變化。它有任何意義嗎?
什麼是'(cons x''nil)'???爲什麼沒有引用兩次? –
''(foo。'nil)'應該是什麼?爲什麼沒有引用? –
@RainerJoswig我現在找不到源代碼,但是有一個地方,我發現這種方式在最後得到了與零的虛線對。這可能是問題所在,但我無法弄清楚如何在點後面的空列表中創建點對。 – dptd