我是 haskell 的新手,正在研究一個名為combineAll.
它的輸入將是三個整數串列,其輸出將是一個整數串列。
它將按相應順序回傳三個串列的總和。
例如,如果輸入值為:
[[1,0,0,0],[1,1,1,0],[1,1,0,0]]
那么輸出值將是:
[3,2,1,0]
我將其簽名定義為:
combineAll :: [[Int]] -> [Int]
我試過zipWith ( )了,但由于它需要兩個輸入,我似乎不可能建立遞回。
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
您可以使用 來解決這個問題transpose,并使用 來轉換結果串列map。
映射功能將是......
要找出它是什么,請查看每個元素的型別,以及我們有興趣為它們生成的值是什么。
uj5u.com熱心網友回復:
如果您只想將 3 個串列壓縮在一起,請查看zipWith3 。
或者,更通用的解決方案是通過一次將兩個 int 串列壓縮在一起來折疊串列。
uj5u.com熱心網友回復:
這似乎是一個家庭作業,你還沒有展示代碼,所以我不會用代碼展示一個完整的解決方案,但一般來說:
您可以map head跨越您的串列串列。如果你這樣做,[[1,0,0,0],[1,1,1,0],[1,1,0,0]]你會得到[1, 1, 1]. 您可以將這些相加得到3.
如果你map tail越過[[1,0,0,0],[1,1,1,0],[1,1,0,0]]你得到[[0,0,0],[1,1,0],[1,0,0]]. 如果您遞回地應用它,您可以獲得串列串列中串列的相應元素的總和。
uj5u.com熱心網友回復:
另一種選擇是使用該transpose功能。您的輸入將產生:
ghci> transpose [[1,0,0,0],[1,1,1,0],[1,1,0,0]]
[[1,1,1],[0,1,1],[0,1,0],[0,0,0]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474032.html
