1

一段时间以来,我一直在摸不着头脑-也许有人可以阐明如何从包含(键值)子列表的嵌套列表中格式化“make-instance”的初始化参数列表。例子:

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

如果我在这样的列表中有关键字和值:

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

任何帮助和指点表示赞赏!

谢谢,马利诺

4

2 回答 2

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))
于 2015-05-02T09:27:42.083 回答
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),然后将它们全部按顺序连接在一起。这是 map 函数的典型模式mapcan

于 2015-09-30T21:31:14.083 回答