在这段代码中:
[x | temp <- str, x <- isVowel temp]
我想知道是什么
<-
运营商做<- str
运营商做
isVowel
如果其参数是元音,则返回 true。
在这段代码中:
[x | temp <- str, x <- isVowel temp]
我想知道是什么
<-
运营商做<- str
运营商做isVowel
如果其参数是元音,则返回 true。
你是对的,这<-
有点像一个任务。
有关更多信息,这里是学习列表推导的绝佳资源。
列表推导与集合推导非常相似。我们现在将坚持获取前 10 个偶数。我们可以使用的列表推导是[x*2 | x <- [1..10]]。x 是从 [1..10] 中提取的,对于 [1..10] 中的每个元素(我们已经绑定到 x),我们得到那个元素,只是加倍。
然而,这还不是全部:
在列表推导中,<-
基本上是“foreach”。每个pattern <- list
子句都对其 : 进行迭代list
:提取每个连续的元素,并将其绑定到 中的变量名称,以pattern
用于其余子句以及结果表达式。
所以,这很像分配。与命令式语言的主要概念区别在于没有修改或更新变量的概念:想法是您正在使用不可变值,这些值在每次迭代时都新“绑定”到它们的名称。
请注意,多个pattern <- list
子句的行为类似于嵌套的 for 循环。
我肯定是错的,但我一直认为这样<-
读
[x | temp <- str, x <- isVowel temp]
就像temp
其中 str
可以帮助您使用变量命名约定一样。因此,考虑到引用透明度,它可能读作...返回 x
in isVowel
in str
的列表。