Haskell 的惰性和列表理解。完成条件

互联网 行业动态 更新时间:2024-06-13 00:19:32

Wil*_*sem 7

Haskell 将首先遍历整个列表,然后检查null.

没有null检查它是否为空列表,并返回空True列表[]和数据构造函数。“旧”被实现为 [src]:False(:)null

null                    :: [a] -> Bool
null []                 =  True
null (_:_)              =  False

因此,它会将列表推导评估为头范式(HNF),并且一旦它知道它可以返回的外部数据构造函数TrueFalse它不会检查第一个元素是什么,所以如果这是一个昂贵的表达式,它不会浪费那个时间。

“新”null实现为 [src]:

null :: t a -> Bool
null = foldr (\_ _ -> False) True

列表在哪里foldr实现为 [src]:

foldr k z = go
          where
            go []     = z
            go (y:ys) = y `k` go ys

因此,它也将简单地检查外部数据构造函数是空列表[]还是“cons” (:),因为在这种情况下k返回True并且对参数不感兴趣。

列表推导也是惰性的:它们只会在必要时评估外部数据构造函数,并在必要时构造头部和尾部。您的列表理解被取消为:

concatMap (\x -> if x == s1 then [x] else []) s2

如果它因此必须评估列表的外部数据构造函数,它将迭代s2,如果x == s1那么它将产生作为外部数据构造函数的“cons”,然后null可以使用它来确定列表是否为空。

因此,这意味着xs2哪里找到元素的那一刻起x == s1,它就会返回False

更多推荐

惰性,条件,列表,Haskell

本文发布于:2023-04-21 09:48:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/ea78558d65ff3247a10035d914c6fcc6.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:惰性   条件   列表   Haskell

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!