sau*_*atz 1 haskell list-comprehension
我试图在Monad.Reader问题8中理解Brent Yorgey的多集分区算法.自从我写了任何Haskell以来已经有很长一段时间了,我想我甚至忘记了基本的东西.我坚持这个清单中的代码:
我应该告诉你,这Vec是一个类型别名[Int],这<|=意味着向量的分量比较:
该函数withinFromTo应该返回非负矢量分量地的名单<= m,以及按字典之间s以及e(含).
我被困在线上:
[x:xs | x <- [start, (start-1)..end]
Run Code Online (Sandbox Code Playgroud)
什么[start, (start-1)..end]意思?我去了tryhaskell.org尝试评估,[3,2..7]但它只是给了我[].
我知道这看起来像是一个愚蠢的问题,但我无法通过谷歌搜索找到任何东西,而且我觉得我可以在浏览文档之前阅读文档很长时间.
谢谢你的帮助.
该[a, b .. c]语法的目的是使该开头算术级数a和b,并继续直到它击中c.用一些例子解释它可能是最简单的:
> [3, 2 .. 0]
[3,2,1,0]
> [2, 4 .. 10]
[2,4,6,8,10]
> [3, 1 .. -10]
[3,1,-1,-3,-5,-7,-9]
Run Code Online (Sandbox Code Playgroud)
在Haskell的报告部分等差数列,与上一节一起的Enum类型类具有的全部细节:
算术序列满足这些身份:
Run Code Online (Sandbox Code Playgroud)[ e1.. ] = enumFrom e1 [ e1,e2.. ] = enumFromThen e1 e2 [ e1..e3 ] = enumFromTo e1 e3 [ e1,e2..e3 ] = enumFromThenTo e1 e2 e3其中
enumFrom,enumFromThen,enumFromTo,和enumFromThenTo是在类类方法Enum中的定义,Prelude(见图6.1).对于类型
Int和Integer,枚举函数具有以下含义:
- 序列
enumFrom e1是列表[e1,e1 + 1,e1 + 2,...].- 序列
enumFromThen e1 e2是列表[e1,e1 + i,e1 + 2i,...],其中增量i为e2 ? e1.增量可以是零或负数.如果增量为零,则所有列表元素都相同.- 序列
enumFromTo e1 e3是列表[e1,e1 + 1,e1 + 2,... e3].如果列表是空的e1 > e3.- 序列
enumFromThenTo e1 e2 e3是列表[e1,e1 + i,e1 + 2i,... e3],其中增量i为e2 ? e1.如果增量为正或零,则列表在下一个元素大于时终止e3; 如果列表是空的e1 > e3.如果增量为负,则列表在下一个元素小于时终止e3; 如果列表是空的e1 < e3.
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |