使用变量作为公共 lisp 中的值创建关联列表

Sma*_*isp 3 lisp list common-lisp

我正在寻找创建一个以变量作为值的关联列表(common lisp)。

让我用(虚拟)代码更好地解释:

(defun mylist-create (val1 val2)
  (setq alist '((key1    . val1)
                (key2     . val2)))
  ;; do other things here
  ;; and return the list 
  alist)

(format t "~a~%" (mylist-create "toto" "tata"))
Run Code Online (Sandbox Code Playgroud)

这里的问题是“val1”和“val2”不被视为变量,因为列表不是用它们的值创建的,而是用它们的名称创建的。

如何在列表创建中提取它们的价值?“setf and assoc”是添加键/值对的唯一解决方案吗?

unp*_*680 6

准引用是一种有选择地允许取消引用的值进入引用形式的方法。

(let ((x 10) (y 20))
   `((x . ,x)
     (y . ,y)))

=> ((X . 10) (Y . 20))
Run Code Online (Sandbox Code Playgroud)

因此,您使用反引号开始准引号,并在要评估的形式之前使用逗号,然后再进入引用形式。