我不知道單子中的遞歸。來自haskell.org的維基是一個例子:遞歸單子
main = f 3
f 0 = return []
f n = do v <- getLine
vs <- f (n-1)
return $! v : vs
這個程序從標準輸入中遞歸地獲取三行。我無法理解的是,當你到達f 0以及遞歸如何展開時會發生什麼。 do塊的最終值如何構建?爲什麼在遞歸中重複調用最終返回行?我知道返回不是函數返回,如命令式語言,但我不明白這條線是如何重複的。
我知道這是一個原始的初學者問題,但我很難過。
在紙上,嘗試用f的定義替換'vs < - f(n-1)'中的'f',直到完全展開爲止。 – Squidly 2014-11-21 13:03:06
順便說一句,如果'$!'是'seq',它的使用看起來毫無意義,因爲'v:vs'已經處於弱頭標準形式。 – chi 2014-11-21 13:19:22