【问题标题】:SBCL common lisp, using pmap within a loopSBCL common lisp,在循环中使用 pmap
【发布时间】:2017-04-06 08:23:44
【问题描述】:

我最近一直在处理 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 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 操作中,第二个循环是在某种特殊函数中使用第一个循环和整个第二个循环中的单个元素执行的。关于为什么这不应该是可能的,我认为没有概念上的错误,但它给我带来了一些内存错误(?)

非常感谢!

【问题讨论】:

    标签: common-lisp sbcl


    【解决方案1】:

    这有帮助吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 2015-04-30
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2015-09-30
      相关资源
      最近更新 更多