У меня есть список имен очереди в следующем виде:Как создать пунктирную пару с нулевой
'("foo" "bar")
Я пытаюсь хранить очереди в списке ДООСА следующим образом:
'(("foo" . nil) ("bar" . nil))
В основном это список участников с очередями «foo» и «bar», которые в настоящее время пустые. Когда Боб и Алиса будут в очереди «foo», он должен выглядеть следующим образом.
'(("foo" . ("alice" "bob")) ("bar" . nil))
Как создать эту структуру? Я пытался добиться того, что написав:
(mapcar #'(lambda (x) (cons x ''nil)) '("foo" "bar"))
который вернулся
'(("foo" QUOTE NIL) ("bar" QUOTE NIL))
это, вероятно, не то, что я хотел, потому что, когда я попытался оттолкнуть Боба к «Foo» очереди он не работает Я хотел.
* (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))
Как создать точную пару с пустым списком после точки?
EDIT: Фактически, когда я храню такой список ассоциаций, как слот класса, он выглядит нормально.
* (describe myClassInstance)
;; ...
QUEUES = (("foo" . 'NIL) ("bar" . 'NIL))
;; ...
Однако после написания добавления Боба в очередь «foo» все очереди меняются.
* (push "bob" (caddr (assoc "foo" (slot-value myClassInstance 'testClass::queues) :test #'string=))))
* (describe myClassInstance)
;; ...
QUEUES = (("foo" . '("bob") ("bar" . '("bob"))
;; ...
Что здесь произошло? Похоже, что часть всех очередей была единственным символом, и когда я изменил ее значение в одном месте (очередь «foo»), то он был изменен во всех местах (все очереди). Это имеет смысл?
Что такое '(cons x '' nil)' ??? Почему ниль цитируется дважды? –
Что такое '' (foo. 'Nil) 'должно быть? Почему ниль цитируется? –
@RainerJoswig Я не могу найти источник сейчас, но было место, где я нашел этот способ получить пунктирную пару с нулем в конце. Вероятно, это проблема, но я не могу понять, как создать точную пару с пустым списком после точки. – dptd