CLOS:make-instance的格式化初始化参数列表

时间:2015-04-29 20:10:19

标签: formatting common-lisp clos

我现在已经在这个问题上摸不着头脑了 - 也许有人可以说明如何格式化' make-instance'的初始化参数列表。从包含(键值)子列表的嵌套列表中。例如:

(make-instance 'myclass :initarg1 1 :initarg2 2 :initarg3 '(a b))

如果我在列表中有关键字和值,请执行以下操作:

'((initarg1 1) (initarg2 2) (initarg3 '(a b)))

任何帮助和指示赞赏!

谢谢, Marleynoe

2 个答案:

答案 0 :(得分:1)

(apply #'make-instance 'myclass
       (loop for (parameter value) in '((initarg1 1) (initarg2 2) (initarg3 '(a b)))
             collect (intern (symbol-name parameter) (find-package :keyword))
             collect value))

答案 1 :(得分:1)

(apply #'make-instance 'myclass
       (mapcan #'(lambda (param)
                   (list (intern (symbol-name (car param)) (find-package :keyword))
                         (cadr param)))
               '((initarg1 1) (initarg2 2) (initarg3 '(a b)))))

我们的想法是每个(initargk k)参数对都映射到一个新列表(:initargk k),然后所有参数对按顺序连接在一起。这是地图函数mapcan的典型模式。