【发布时间】:2022-12-06 12:13:56
【问题描述】:
在 Haskell 中,当您在列表的 do 循环中使用 <- 时,它会返回整个列表吗?
所以:
do
//some code
c <-[1..4]
//some code
c 会是 [1,2,3,4] 吗?
【问题讨论】:
-
Haskell doesn't have loops。我想你还没有动脑子猛烈地颠倒由 Haskell 及其 FP 范式(别担心,它在某些时候发生在我们所有人身上)。 (过度简化警告:Haskell 没有描述如何一个程序工作,而不是它描述什么它确实)。
-
The
dokeyword in Haskell describes a monad(这是只执行一次的操作序列,这就是它用于 IO 的原因)。它与 C 系列语言的while/do循环完全无关。 -
@Dai 我的意思是,这并非完全无关。
do {x <- [1..4]; pure (x + 1)}的计算结果为[2,3,4,5]。列表是一个 monad,所以你可以用doifm ~ []循环。 -
你能显示
do之前的几行吗? -
我最喜欢的 monad 解释是“可编程分号”。此行仅在您使用“列表分号模式”(又名
Listmonad) 这是一种在所有列表元素上单独运行代码的模式。
标签: haskell