写一个函数sumdv,它包含一个整数列表,并将列表中所有能被3或4整除但不能被6整除的数相加。禁止使用函数sum、filter、convolution和列表生成器。
sumdv :: [Integer] -> [a] -> [Integer]
sumdv = add
sumdv [] = 0
sumdv (x:xs)
| mod 3 x == 0 || mod 4 x == 0 = x + sumdv (x:xs)
| mod 6 x == 0 = sumdv (x:xs)
嘿,伙计们,我对正确的类型有点困惑,因为系统只显示“Variable not in scope:sumdv::[Integer] -〉t”。我的想法是,首先我有一个整数列表,因为它必须是“整数”,然后给了我一个不同元素的列表,必须为我加在一起,它是:[Integer] -〉[a] -〉a但它不起作用:(-
1条答案
按热度按时间vuktfyat1#
我要说的是,有多个错误:
sumdv = add
sumdv (x:xs)
调用导致无限递归(您正在调用传递相同输入而未修改的函数)mod
参数的顺序错误mod x 6 == 0
模式保护应在mod x 3 == 0 || mod x 4 == 0
之前,因为只计算第一个匹配保护,如果将mod x 3 == 0
放在第一个,则不会筛选出可被6整除数字otherwise
case的模式保护(当数字不能被3、4或6整除时)考虑到上面的所有注意事项,示例实现可以如下所示: