我對Haskell很新,只是開始學習它。 我正在使用「學習你一個偉大的好事Haskell!」教程開始,看到解決的例子「3N + 1」的問題:過濾列表清單
chain :: (Integral a) => a -> [a]
chain 1 = [1]
chain n
| even n = n:chain (n `div` 2)
| odd n = n:chain (n*3 + 1)
numLongChains :: Int
numLongChains = length (filter isLong (map chain [1..100]))
where isLong xs = length xs > 15
所以,numLongChains統計更長15個步驟,從1所有號碼爲100。
現在,我想所有連鎖我自己的:
numLongChains' :: [Int]
numLongChains' = filter isLong (map chain [1..100])
where isLong xs = length xs > 15
所以現在,我不想計算這些鏈,但返回與這些鏈條過濾列表。 但現在我在編譯時出現錯誤:
Couldn't match expected type `Int' with actual type `[a0]' Expected type: Int -> Bool Actual type: [a0] -> Bool In the first argument of `filter', namely `isLong' In the expression: filter isLong (map chain [1 .. 100])
可以採取什麼問題嗎?
謝謝!真的是我的錯,用[[Int]]解決了問題 – dmitry
@dmitry請接受這個答案來幫助別人。只需點擊答案評分下方的綠色勾號即可。 – fuz