我是新來的haskell.I試圖創建一個遞歸報告列表的總和的函數。可以幫我嗎?遞歸報告列表的總和,如果它包含正好3個奇數
回答
列表理解有另一種語法:
[expr | x <- xs, ...]
所以你的情況:
function xs = if length xs' == 3 then sum xs else (length xs' - length xs'') where
xs' = [x | x <- xs, mod x 2 == 1]
xs'' = [x | x <- xs, mod x 2 == 0]
但是你可以用函數partition
獲得xs'
和xs''
一次:
(xs', xs'') = partition (\x -> mod x 2 == 1) xs
正如評論中提到的那樣,它不是遞歸的。解決方案的想法是在@ michal-gajda答案:越過列表並收集機率,平均數和總和。在年底作出決定:
function = go 0 0 0 where -- same as function xs = go 0 0 0 xs
go odds evens s [] = if odds == 3 then s else odds - evens
go odds evens s (x:xs)
| odd x = go (odds + 1) evens (s + x) xs
| otherwise = go odds (evens + 1) (s + x) xs
我不相信他的老師會接受這個遞歸解決方案。 – destoryer
@changed如果可能,你可以提供一個替代的遞歸解決方案嗎? –
@ changed,好吧,我同意:)它不遞歸 –
你應該使用內部函數go
,即遞歸累積三種結果:
- 列表中的可能性的數量。
- 列表中的平均數。
- 列表總和。
然後,當列表是空的,你決定什麼返回:
finalStep (odds, evens, sum) | odds == 3 = sum
| otherwise = odds-evens
- 1. 報告服務:如果正文包含
- 2. 計算如果給定列表的子集的總和遞歸
- 3. 表中的列值總和 - Rdlc報告
- 4. 遞歸列表中包含財產
- 5. 遞歸列表<Integer>的總和
- 6. 遞歸,計算正整數的總和
- 7. 包含來自Access中不同查詢的總和的報告
- 8. GA報告包含兩個參數
- 9. 遞歸總和
- 10. 遞歸函數和列表
- 11. 總和,如果在列中包含某個值
- 12. 如何在報告中製作包含多列的表格
- 13. 需要總結列如果2個或3列包含與標準
- 14. 如何最好總結2列和更新第3列總和?
- 15. CLISP遞歸函數的ATOM返回,如果它是一個列表
- 16. Python - 列表中的整數的總和(遞歸)
- 17. 正則表達式找到一個正好包含3個單詞的行
- 18. Python中,得到數字列表的總和與遞歸
- 19. 使用C++中的尾遞歸函數計算列表總和
- 20. Project Server SSRS報告 - 一個報告動態地包含多個報告
- 21. 出於好奇:哪個更適合創建總和?總和(列表)與積累
- 22. 追加一個列表和遞歸(海明距離) - Python的3
- 23. 報表生成器3中的列表報告 - 它可以並排嗎?
- 24. scalatest報告包含$ u0020和$冒號
- 25. 模型包含它自己的模型類型列表(遞歸建模?)
- 26. ssrs如何緩存包含子報告的報告
- 27. 快速查詢表,如果它包含一個鍵(DynamoDB和Java)
- 28. rdlc報告頁腳中的列總數
- 29. 數字的遞歸函數總和R
- 30. 隱藏行,如果它包含空列
僅供參考,Haskell有內置'even'和'odd'功能。 –