SBCL常见的lisp,在循环中使用pmap

时间:2017-04-06 08:23:45

标签: common-lisp sbcl

我最近在处理SBCL中的嵌套for循环。我发现,可以使用pmap(或任何类似的函数)轻松地将可以简化为map的操作并行化。我决定尝试以下列方式使我的double 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)

我希望这能提升性能,因为在这种情况下,地图可以很容易地用pmap替换。所以为了澄清一点,问题是:

可以用map替换第一个循环,其中在每个映射操作中,使用来自第一个循环和整个第二个循环的单个元素在某种特殊函数内执行第二个循环。我没有看到为什么这不应该是可能的概念错误,但它却引发了一些内存错误(?)

非常感谢!

1 个答案:

答案 0 :(得分:2)

这有帮助吗?

(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))