common-lisp - SBCL common lisp,在循环中使用 pmap

标签 common-lisp sbcl

我最近一直在处理 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/

相关文章:

common-lisp - Lisp 中的词法绑定(bind)

recursion - 定义一个递归函数来计算common lisp中数字的位数

common-lisp - 限制调试输出中的字符串长度

optimization - SBCL:Fixnum 优化

lisp - 如何定义惰性 AND

recursion - Lisp递归宏问题

lisp - '(a b c) and (list ' 和 'b ' c) 有什么区别?

compilation - 如何将多个 lisp-fasl 文件链接到一个文件中?

http - Lisp 的奇怪 HTTP 问题/错误

lisp - 写入文件 "is private to #<PROCESS worker( )"时出错