sum1::[Int]->[Int]
sum1 [] =0
sum1 (x:xs) = [x|x<-xs,x `mod` 2 ==0]
Run Code Online (Sandbox Code Playgroud)
我需要返回在提供列表时可被2整除的数字,但上面的代码给出了这个编译错误:
Instance of Num [Int] required for definition of sum1
Run Code Online (Sandbox Code Playgroud)
还请解释一下(x:xs).它是' xs list 的X元素吗?'
如果我们想获得列表的第n个元素,我们如何得到它?
eri*_*sco 15
你问过几个问题所以我会逐一回答.
问题1:编译器为什么告诉我Instance of Num [Int] required for definition of sum1?
您已经创建了一个sum1使用该类型调用的函数[Int]->[Int].但是,请考虑以下行sum1 [] = 0:此返回Int,而不是[Int].解决此问题的方法是将行更改为sum1 [] = [].
问题2:(x:xs)是什么意思?
Haskell允许你执行一些调用pattern matching.没有太多细节,因为有很多更好的解释,效果是这x是列表的第一个元素,是列表xs的其余部分 - 也就是说,你已经剥离了列表的第一个元素.
例如,如果你打电话sum1 [1,2,3],那x将是1和xs将会[2,3].
问题3:如果我们想获得列表的第n个元素如何获得它?
执行此操作的常用方法是使用!!函数 - 它是固定的,也就是说,您提供左侧和右侧参数,就像您使用+或*.例如,[1,2,3]!!1将返回2.
现在,如果这有助于澄清事情,您应该注意到您的函数定义存在一些问题.我不确定你是否愿意自己解决这些问题.
| 归档时间: |
|
| 查看次数: |
4653 次 |
| 最近记录: |