函數語言程式設計 - 惰性求值



惰性求值是一種求值策略,它會延遲表示式的求值,直到需要它的值為止。它避免了重複求值。Haskell就是一個很好的例子,這種函數語言程式設計語言的基礎就是惰性求值。

惰性求值用於Unix對映函式以提高其效能,方法是從磁碟載入僅需的頁面。不會為其餘頁面分配記憶體。

惰性求值 - 優點

  • 它允許語言執行時丟棄與表示式最終結果沒有直接關聯的子表示式。

  • 它透過丟棄臨時計算和條件語句來減少演算法的時間複雜度。

  • 它允許程式設計師在初始化資料結構的元件後,以任意順序訪問它們,只要它們沒有迴圈依賴關係。

  • 它最適合載入不常訪問的資料。

惰性求值 - 缺點

  • 它迫使語言執行時透過建立thunk(延遲物件)來保持子表示式的求值,直到它在最終結果中需要為止。

  • 有時它會增加演算法的空間複雜度。

  • 很難找到它的效能,因為它在執行之前包含表示式的thunk。

使用Python進行惰性求值

Python中的range方法遵循惰性求值的理念。它節省了較大範圍的執行時間,並且我們不需要一次獲取所有值,因此也節省了記憶體消耗。請看下面的例子。

r = range(10) 
print(r) 
range(0, 10) 
print(r[3]) 

它將產生以下輸出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
3 
廣告