-2

在这段代码中:

[x | temp <- str, x <- isVowel temp]

我想知道是什么

  • <-运营商做
  • <- str运营商做

isVowel如果其参数是元音,则返回 true。

4

4 回答 4

6

你是对的,这<-有点像一个任务。

有关更多信息,这里是学习列表推导的绝佳资源。

列表推导与集合推导非常相似。我们现在将坚持获取前 10 个偶数。我们可以使用的列表推导是[x*2 | x <- [1..10]]。x 是从 [1..10] 中提取的,对于 [1..10] 中的每个元素(我们已经绑定到 x),我们得到那个元素,只是加倍。

然而,这还不是全部:

  • <-也用于do 表示法

    在 do 表达式中,每一行都是一个单值。为了检查它的结果,我们使用“<-”。

  • <-甚至在monad 理解中使用(虽然这不是很有帮助,因为 monad 理解不再在标准的 Haskell 中,我相信)

于 2012-09-28T16:00:12.917 回答
3

在列表推导中,<-基本上是“foreach”。每个pattern <- list子句都对其 : 进行迭代list:提取每个连续的元素,并将其绑定到 中的变量名称,以pattern用于其余子句以及结果表达式。

所以,这很像分配。与命令式语言的主要概念区别在于没有修改或更新变量的概念:想法是您正在使用不可变值,这些值在每次迭代时都新“绑定”到它们的名称。

请注意,多个pattern <- list子句的行为类似于嵌套的 for 循环。

于 2012-09-28T17:31:19.063 回答
1
于 2012-09-29T07:39:50.547 回答
0

我肯定是错的,但我一直认为这样<-

[x | temp <- str, x <- isVowel temp]

就像temp 其中 str可以帮助您使用变量命名约定一样。因此,考虑到引用透明度,它可能读作...返回 x in isVowel in str的列表。

于 2012-10-01T21:27:08.340 回答