Common lisp SBCL公共lisp,在循环中使用pmap
我最近一直在处理SBCL中的嵌套for循环。我发现,可以简化为map的操作可以很容易地使用pmap(或任何类似的函数)进行并行。我决定尝试以以下方式使双for循环并行: 基本循环:Common lisp SBCL公共lisp,在循环中使用pmap,common-lisp,sbcl,Common Lisp,Sbcl,我最近一直在处理SBCL中的嵌套for循环。我发现,可以简化为map的操作可以很容易地使用pmap(或任何类似的函数)进行并行。我决定尝试以以下方式使双for循环并行: 基本循环: (loop for element in list_of_lists do (loop for element2 in list_of_lists2 ...(random_function element element2))) 这很好用,但我想知道是不是: (defun supplemen
(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))