我正在处理一些Haskell函数示例,但我不明白这个特定的函数:
f x = [not a | a<-[x,not x], a]
Run Code Online (Sandbox Code Playgroud)
它产生[False]输出,但我不明白为什么.请详细解释一下吗?
该列表理解包括三个部分:
[ not a | a <- [x, not x], a ]
-- ^ yield ^ generator ^ filter
Run Code Online (Sandbox Code Playgroud)
该发电机从而让a 迭代在一个列表有两个元素.这些元素是[True,False]或[False,True](取决于价值x).但因此总是相同的值(只有元素的顺序不同).
接下来是滤波器部分a.过滤器保留谓词所在的值True.这里的谓词很简单a:所以它保留了配置a = True.由于这两个True和False的a列举,这意味着我们只需要一个项目考虑:一个地方a是True.
对于那个价值,我们屈服 not a.现在not True是当然的False.因此,无论价值如何x(只要是True或False),我们将始终生成[False].
结果如下:
Prelude> let f x = [not a | a<-[x,not x], a]
Prelude> f True
[False]
Prelude> f False
[False]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |