List 将空列表与[(a,b)]Haskell进行比较
我对Haskell中的列表是如何工作的有点困惑。 我知道List 将空列表与[(a,b)]Haskell进行比较,list,haskell,boolean,tuples,List,Haskell,Boolean,Tuples,我对Haskell中的列表是如何工作的有点困惑。 我知道[]是类型为[a]的空列表。有没有办法定义类型为[(a,b)]的空列表 例如,我知道null[1]=[]将为我们提供True null[(1,2)]=[]给了我一个不匹配的类型错误,这就是我所假设的 我想知道是否可以说null[(1,2)]==[(,)]会给我们True我会像下面这样声明我的列表: let myList = [] :: [(Integer, Integer)] 然后myList将具有类型:t myList将产生myList
[]
是类型为[a]的空列表。有没有办法定义类型为[(a,b)]的空列表
例如,我知道null[1]=[]
将为我们提供True
null[(1,2)]=[]
给了我一个不匹配的类型错误,这就是我所假设的
我想知道是否可以说
null[(1,2)]==[(,)]
会给我们True
我会像下面这样声明我的列表:
let myList = [] :: [(Integer, Integer)]
然后myList
将具有类型:t myList
将产生myList::[(整数,整数)]
当计算null myList
时,它会产生True
是否有方法定义类型为[(a,b)]
的空列表
只需[]
。实际上,[]
是一个空列表,但是元素的类型是免费的。它具有类型[a]
,但是a
可以与(b,c)
相同,因此具有两种不同类型的2元组
例如,我知道null[1]=[]
将为我们提供True
是一个函数,它接受fa
(在本例中为[a]
),并返回Bool
。它检查列表是否为空。它不生成列表
我知道[]
是一个类型为[a]
是的,但是理解“type[a]
”的实际含义很重要。实际上,它意味着所有a的类型。[a]
,也就是说,这不是某个特定类型“a”的元素列表,而是给定类型a
的任何选择,它是该类型的列表。特别是,它也可以是元组类型的列表。因此,null
与任何其他类型的列表一样适用于元组列表
要在这样的元组列表中实际看到null
,只需提供一个。例如,null[(1,2)]
将其用于元组列表。但是在空列表的情况下,列表中没有可以约束类型的内容。它可能是从上下文中清楚的,如
Prelude> [null l | l <- [ [], [(1,2)], [(1,3)] ]]
[True,False,False]
每种类型的列表都表示为
[]
。如果要指定类型,可以使用签名([]:[(a,b)]
),但编译器通常可以从上下文推断类型:
λ> [] == [(1, 'x')]
False
null[1]=[]
是一个类型错误。是的,让{xs=tail[(未定义,未定义)]}进入null xs
。
λ> [] == [(1, 'x')]
False