Haskell列表理解

如何解决Haskell列表理解

|
sum1::[Int]->[Int]
sum1 [] =0
sum1 (x:xs) = [x|x<-xs,x `mod` 2 ==0]
提供列表时,我需要返回可被2整除的数字,但是上面的代码给了我这个编译错误
 Instance of Num [Int] required for deFinition of sum1
另外请解释
(x:xs)
的作用。是\'xs list的X元素吗?\' 如果我们想获得列表的第n个元素,我们如何得到它?     

解决方法

        您已经问了几个问题,所以我将一一解答。 问题1:为什么编译器会告诉我“ 3”? 您已经创建了一个名为
sum1
的函数,类型为
[Int]->[Int]
。但是,请考虑行
sum1 [] = 0
:这将返回
Int
,而不是
[Int]
。解决此问题的方法是将行更改为“ 9”。 问题2:(
x:xs
)是什么意思? Haskell允许您执行称为“ 11”的操作。无需过多赘述,因为有很多更好的解释,结果是
x
是列表的第一元素,
xs
是列表的其余元素-也就是说,您已经剥离了名单。 例如,如果您呼叫
sum1 [1,2,3]
,则
x
将为
1
,而
xs
将为
[2,3]
。 问题3:如果要获取列表的第n个元素,该如何获取? 常用的方法是使用
!!
函数-是固定的,即,您提供argument20或
*
时都需要左右参数。例如,
[1,3]!!1
将返回
2
。 现在,如果这有助于澄清问题,您应该注意到函数定义存在一些问题。我不确定您是否要自己解决这些问题。     ,        
sum1::[Int]->[Int]
sum1 [] = [0] // problem here 
sum1 (x:xs) = [x| x <- xs,x `mod` 2 == 0]
sum1
必须返回
[Int]
,但是在这种情况下,它仅返回return7ѭ。 与列表中的
(x:xs)
匹配的模式会将列表的第一个元素放在
x
中,并将列表的其余元素放在
xs
中。 如果您想让
sum1
返回列表中的所有偶数,则应将代码更改为
sum1::[Int]->[Int]
sum1 [] = [0] // problem here 
sum1 xs = [x| x <- xs,x `mod` 2 == 0]
因为,您当前的代码将跳过列表的第一个元素。尝试以
[2..10]
作为输入。您不会在输出列表中看到
2
。 要从列表
xs
haskell语法中获得第35个元素,请执行以下操作:
xs !! n
*Main> [1..10] !! 5
6
下次遇到麻烦时,请查看一些常见(但不太常见!)拥抱错误。     ,        好吧,他们回答正确了,但是无论如何我都会告诉你他们没有的事情:P   问题2:(x:xs)是什么意思? Haskell中的列表由以下人员组成: HEAD + TAIL,其中HEAD是第一个元素,而TAIL是其他元素。   \“ head [1,3] \”将返回1      \“ tail [1,3] \”将返回[2,3] 但是无论如何,还有其他功能:   \“ init [1,3]将返回[1,2]   \“最后[1,3]将返回3 如果您从Haskell开始,请检查此 PS:对不起,我的英语不好!     ,        您不需要使用列表理解就可以做到!
sum1 = \\xs -> [ x | x <- xs,mod x 2 == 0]
第n个元素问题的另一个解决方案:
nth_elem = \\n xs -> head $ [ x | (id,x) <- zip [1..] xs,id == n ]
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?