目前我哈斯克爾瞎搞。我對Haskell的知識(以及一般的函數式語言)仍然很低,但我正在努力。 真正困擾我的是一個(我認爲)簡單的任務:摺疊嵌套列表,每一個深度倍。哈斯克爾摺疊嵌套列表
fcalc = foldr (\x y -> (foldr (**) 1 x) * (foldr (**) 1 y)) [1.0, 1.0] [[2.0, 3.0], [4.0, 5.0]]
它應該做什麼:2^3 * 4^5其中^由lambda'd內摺疊完成。可悲的是它不起作用。
Occurs check: cannot construct the infinite type: t0 = [t0]
In the third argument of `foldr', namely `y'
我讀了一些關於給定的「無限類型」的錯誤,主要表明一個變量被用作例如「元素,而它是一個列表。這讓我想到了外部問題的第二個參數是問題,但沒有成功。 我只是不明白。 :/
好吧,我不知道你是否AREN對此不會採取錯誤的方式。首先,你打破了我的一個經驗法則:你不使用摺疊來直接解決問題,而是使用它們來實現一些中間抽象來解決你的問題。其次,我想知道列表和嵌套列表是否真的是您嘗試執行的正確數據結構;我感覺你正在處理某種抽象語法樹更好地服務的問題區域。 – 2012-02-02 20:57:06