我試圖理解Haskell中的列表,並且我碰到了一些我不確定的東西。是否有可能遍歷一個循環,並在每次迭代中添加一個項目到列表?對於這個問題的目的,我寫了下面的代碼:Haskell通過遞歸將元素添加到列表中
list = []
addNumbers 0 = return()
addNumbers n =
do
print n
n : list
addNumbers (n-1)
我認爲這會工作,但它似乎給了錯誤「無法與‘IO’匹配類型‘[]’」。我不太確定爲什麼會出現這個錯誤,因爲用戶沒有要求輸入或輸出。我認爲這可能與「打印n」有關,但如果沒有這一行,它似乎不起作用。
乾杯提前任何幫助
通常在Haskell你會分裂的數字從創建這樣一個列表打印(不純的操作)(純)。如果您只是使用print語句進行調試,則可以使用類似Debug.Trace的方法來欺騙類型檢查器(同樣,僅用於調試目的)。 http://en.wikibooks.org/wiki/Haskell/Debugging#Debug_prints_with_Debug.Trace – MaxGabriel
您將'print'中的'IO' monad和List monad混合在同一個綁定中!請記住'a < - something'只是'something >> = \ a - >'的糖,因此它需要非常特殊的類型。 – AJFarmar