gpt4 book ai didi

functional-programming - 是否有任何函数式语言本身支持分而治之?

转载 作者:行者123 更新时间:2023-12-03 23:44:48 24 4
gpt4 key购买 nike

很抱歉,我无法在标题中找到更清楚地表达问题的方法,但本质上是这样的:几乎所有的函数式语言都具有允许您通过尾递归处理可变参数列表的构造,如在这个总结数字列表的 Erlang-ish 伪代码中:

sumup(0,A) -> A.
sumup(N,A) -> sumup(N) + A.

然而,函数式语言对我最大的吸引力之一是它们固有的并行性。而且,即使对数字列表求和之类的问题显然可以并行化,并且几乎肯定可以通过分而治之最有效地处理,但我不知道使这成为自然编程方式的语言特性。事实上,除非该语言具有允许读取基于函数的参数数量并基于索引检索参数的功能,否则我不知道如何 可以 做吧。是否有任何函数式语言具有鼓励分而治之编程的功能?

最佳答案

Do any functional languages have features to encourage divide-and-conquer programming?



是:在库中创建新的高阶函数的能力。

无论如何,列表中最重要的此类函数之一是 foldr ,当应用于关联运算符时,原则上可以并行化,尽管在实践中很少这样做。为什么?因为 foldr是围绕顺序数据流设计的。

函数式语言的美妙之处在于,一旦认识到这个问题,我们就可以解决这个问题,而不是通过引入新的语言特性,而是更智能地利用我们已有的特性。要了解如何,请查看 Guy Steele's talk from August 2009 ,他解释了原因 foldr不是并行函数式编程的正确库函数,他建议
  • 一种新的编程风格
  • 列表的新表示
  • 库的新高阶​​函数

  • 所有这些都旨在支持分而治之的编程。

    我发现这次演讲如此令人兴奋的是 没有必要引入新的语言特性来“本地”支持分而治之的编程。 使用我们已有的原语并使用它们来设计更好的库就足够了。

    如果您可以访问 ACM 数字图书馆,您可以看到盖伊演讲的视频 Organizing Functional Code For Parallel Execution ,或者正如 Ben Karel 指出的那样,您可以看到 video taken by Malcom Wallace在 Vimeo 上。

    关于functional-programming - 是否有任何函数式语言本身支持分而治之?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300535/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com