这让我很困惑,我知道我对哈斯克尔有一个很好的了解,但是我不能得到整个"计算"部分工作。
recursion :: [Int] -> Int
recursion [] = []
recursion (x:xs) = if x `mod` == 3 then.. +1 + recursion xs
我知道它出了什么问题,整个然后+1部分但是不能做到
计算在给定列表中可以将3个整除的数字。
答案 0 :(得分:6)
要编写递归解决方案,首先需要考虑基本情况。正如文森特指出的那样,你的基本案件存在严重问题。输出[]
的类型为[a]
,但应为Int
类型。问问自己:
对于递归情况,不清楚你错过了什么,但它可能只是语法。你有一般的想法。
recursion :: [Int] -> Int
recursion [] = -- base case goes here
recursion (x:xs) = if x `mod` 3 -- what is the type of (x `mod` 3)? Haskell isn't C!
then 1 + something
else somethingelse
答案 1 :(得分:2)
这应该适合你:
使用空列表作为返回0的边缘大小写,因此每当列表中的一个元素可以被3分割而不休息时,您可以添加1。如果您可以将元素除以3而不休息,则添加1并使用列表再次调用该函数,否则您只需添加0,例如
recursion :: [Int] -> Int
recursion [] = 0
recursion (x:xs) = if x `mod` 3 == 0 then 1 + recursion xs else 0 + recursion xs