繁体   English   中英

1有什么区别:| Haskell 中的 [2, 3, 4] 和 [1, 2, 3, 4]

[英]What's the difference between 1 :| [2, 3, 4] and [1, 2, 3, 4] in Haskell

我正在学习 Haskell,它是最好的函数式编程语言之一。 我在学习清单时遇到了障碍。 正如我发现有两种可能性来编写一个列表 - 只需使用[]换行。 或使用NonEmpty列表。 这些变体之间有什么区别,什么更好用,为什么?

[1,2,3,4]实际上是语法糖

Prelude> 1:2:3:4:[]
[1,2,3,4]

[]类型有两个数据构造函数: :[] 您使用:将值“限制”到现有列表。 空列表[]是基本情况,因此为了能够创建一个有限列表,您必须使用一个空列表来终止“cons 链”,如上例所示。

换句话说,虽然[1,2,3,4]是列表的一个有效示例,但 [ []也是如此。 列表可以为空。

顾名思义, NonEmpty不能为空。 只有一个数据构造函数:| . 因此,您可以使用NonEmpty表示的最短列表是 singleton 列表:

Prelude Data.List.NonEmpty> 1 :| []
1 :| []

:|的右侧确实接受一个空列表( [] ),您必须为左侧提供一个值(在上面的示例中1 )。 因此,一个NonEmpty列表将始终包含至少一个元素。

这些属性在编译时得到保证,因此如果您需要一个非空列表,请使用NonEmpty ,如果您需要一个可能为空的列表,请使用[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM