簡體   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