回答
.
是函數組合,你這麼說是什麼,採取功能foldr (+) 0 :: [Int] -> Int
與map (^2) a :: [Int]
組成,但是,這個是沒有意義的,你的第二個「功能」,在此成分是不是真的一個函數。
你最好別要的是來交換他們和使用的應用程序,而不是組成
foldr (+) 0 (map (^2) a)
foldr (+) 0 $ map (^2) a
,這可以被轉換回什麼叫做「埃塔轉換」
sumSquares = foldr (+) 0 . map (^2)
sumSquares = sum . map (^2)
由於成分另外,foldr
可能是這裏的錯誤摺疊,foldl'
會更節省空間。
'sum'在其累加器中也是非結構體。 –
@TomEllis是的,這就是爲什麼你可以用它吹堆棧,'foldl''在恆定空間中運行 – jozefg
你要真正做到這一點:
sumSquares a = foldr (+) 0 $ map (^2) a
演示了ghci:
ghci> sumSquares [2,2]
8
要使用(.)
運營商解決這個問題,你可以使用該解決方案由@Sassa提到:
sumSquares = foldr (+) 0 . map (^2)
但我覺得很難看,或者你可以看到jozefg解決方案,其中h Ë使用sum
和(.)
這有效!非常感謝 – user3105607
我被告知要使用。運算符,爲什麼這不起作用,或者如何改變我的代碼以使用點?謝謝 – user3105607
@ user3105607請參閱jozefg答案。 :) – Sibi
- 1. 哈斯克爾:地圖runST
- 2. 哈斯克爾仿錯誤
- 3. 錯誤哈斯克爾
- 4. 哈斯克爾,錯誤
- 5. 哈斯克爾RealFrac錯誤
- 6. 哈斯克爾錯誤
- 7. 哈斯克爾解析錯誤圖案
- 8. 數據類型哈斯克爾錯誤
- 9. 哈斯克爾函數簽名錯誤
- 10. 分數詮釋錯誤[哈斯克爾]
- 11. 哈斯克爾地圖的樹木
- 12. 列表中的哈斯克爾錯誤
- 13. 哈斯克爾 - 錯誤的執行
- 14. 哈斯克爾代數參數
- 15. 發生曖昧「地圖」錯誤WinHugs /哈斯克爾
- 16. 哈斯克爾地圖和過濾器
- 17. 哈斯克爾列表理解地圖
- 18. 應用函數兩次編譯錯誤哈斯克爾
- 19. 哈斯克爾
- 20. 哈斯克爾
- 21. 哈斯克爾
- 22. 哈斯克爾TCP服務器,fd是太大錯誤
- 23. 哈斯克爾:應用函數的參數
- 24. 哈斯克爾ghci.exe錯誤(0xc0000142)
- 25. 哈斯克爾秒差距錯誤
- 26. 哈斯克爾減法錯誤
- 27. 錯誤類型匹配哈斯克爾
- 28. 哈斯克爾類型錯誤
- 29. 哈斯克爾陰謀安裝錯誤
- 30. 模板哈斯克爾編譯錯誤
它看起來像您以錯誤的順序使用(。)。 sumSquares = foldr(+)0。地圖(^ 2) –