我最近一直在处理 SBCL 中的嵌套 for 循环。我发现,可以简化为映射的操作可以使用 pmap (或任何类似的函数)轻松地并行化。我决定尝试通过以下方式使我的双 for 循环并行:
基本循环:
(loop for element in list_of_lists
do (loop for element2 in list_of_lists2
...(random_function element element2)))
这工作得很好,但我想知道是否是这样的:
(defun supplementary_function (single_list list_collection)
"This function iterates through list_collection and executes (random_function) on pairs obtained"
(loop for element in list_collection
do (random_function single_list element)))
(map 'nil (lambda (x) (supplementary_function x list_of_lists2)) list_of_lists1)
我希望这样做可以提高性能,因为在我的情况下,这种情况下的 map 可以轻松地用 pmap 替换。因此,为了澄清一点,问题是:
可以用map替换第一个循环吗?在每个map操作中,第二个循环是使用第一个循环和整个第二个循环中的单个元素在某种特殊函数中执行的。我看不出为什么这不可能的概念错误,但它给我带来了一些内存错误(?)
非常感谢!
最佳答案
这有帮助吗?
(loop for e1 in '(1 2 3 4 5)
do (loop for e2 in '(a b c d e)
do (print (list e1 e2))))
是
(mapc (lambda (e1)
(mapc (lambda (e2)
(print (list e1 e2)))
'(a b c d e)))
'(1 2 3 4 5))
是
(defun f (e1 e2s)
(mapc (lambda (e2)
(print (list e1 e2)))
e2s))
(mapc (lambda (e1)
(f e1 '(a b c d e)))
'(1 2 3 4 5))
关于common-lisp - SBCL common lisp,在循环中使用 pmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249652/