人們說 Haskell 沒有狀態。我認為實用程式需要狀態。哈斯克爾也是如此。Haskell 沒有保存狀態的變數,haskell 是如何保存狀態的呢?我認為 haskell 在 head 中使用 lambda 變數作為記憶體!
someAction1 >>= \result1 ->
( someAction2 >>= \result2 ->
( someAction3 >>= \result3 -> return (somef result1 result2 result3)))
最后一個函式 somef 可以通過 result1, result2, result3 得到 someAction1, someAction2, someAction3 的結果
lambda 變數 (result1, result2, result3) 的作用類似于 MEMORY(用于保存狀態的變數)。
“Haskell 沒有狀態”并不意味著實際程式不需要狀態概念。
lambda 代數之所以能做和圖靈完備一樣的事情,是因為 lambda 變數的作用域。因為 lambda 變數像記憶體一樣使用,所以可以進行通用編程。
我做對了嗎?
uj5u.com熱心網友回復:
“人們說 Haskell 沒有狀態。”
Haskell 確實有狀態,只是大多數時候它是非常短暫的。以下面的函式為例。
mysum :: [Integer] -> Integer
mysum [] = 0
mysum (x:xs) = x mysum xs
這個函式正在爬取狀態,值保存在堆疊中。僅有的兩個長期值是輸入串列和輸出值。如果這個函式被另一個函式呼叫,那么即使這些值也不是長期的。
符號看起來像它有狀態,do但這只是語法糖。看起來勢在必行的代碼變成了一系列鏈接的 lambda 運算式。為 Monad 脫糖 do-notation
如果需要長期狀態,可以將其存盤在 State Monad 或資料庫中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427309.html
上一篇:另一個可能用于“查找最小值”功能
