繁体   English   中英

这种函数式编程优化叫什么?

[英]What is this functional programming optimization called?

考虑以下用于计算第 n 个斐波那契数的 Haskell 代码。

fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)

这段代码很慢。 我们可以通过将其“存储”所有相关数据以在其 arguments 中“存储”所有相关数据来计算递归,重构为“迭代”计算的帮助程序 function 以及告诉我们计算多长时间的“计数器”来优化它。

fastfib :: Int -> Int
fastfib n = helper 1 0 n
  where
    helper a _ 1 = a
    helper a b i = helper (a + b) a (i - 1)

似乎这种优化也可以更广泛地应用。 它在函数式编程社区或其他地方有名字吗?

是的,这叫累加参数技术。 (这是我的答案之一,关于它)。

它与tail-recursion-modulo-cons ("TRMC")、 hylomorphismfolding等密切相关。

Monoids 启用重新括号

a+(b+(c+...)) == (a+b)+(c+...) == ((a+b)+c)+...

这使得积累。 TRMC (在 Prolog 的上下文中被明确地知道)是相同的,只是列表;

[a]++([b]++([c]++...)) == ([a]++[b])++([c]++...) == (([a]++[b])++[c])++...

corecursion像 TRMC 一样以自上而下的方式构建列表。

上面链接的答案包含指向弗里德曼和怀斯1974 年技术报告的链接,该报告本质上是在+幺半群的背景下讨论积累,例如。

斐波那契示例中没有幺半群,但可以说是“知识”的积累,因为我们从一个斐波那契数到下一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM