有方法检查(,)有多少元素吗?我知道我可以使用fst和snd访问元组的第一个和第二个元素,但我认为可以以某种方式对元素进行求和,然后将其与fst元组和元组进行比较,然后进行如下检查:
tuple = (1,2)
sum tuple == fst tuple + snd tuple然后,我在这个案例中得到了真,对于triple = (1,2,3),我得到了假。不管怎样,我不能问fst (1,2,3),也不能做sum tuple
有没有办法检查我是否有元组?
就像这样:
is_tuple :: (a,b) -> a
is_tuple (a,_) = a但是当我输入元组时得到真,当我给出(1,2,3)或(1,2,3,4)等等时,得到假.作为投入。
即:
is_tuple :: Tuple -> Bool
is_tuple x = if x is Tuple
then True
else False发布于 2018-11-19 00:30:28
有方法检查
(,)有多少元素吗?
不,因为答案总是2。
类型(,)是两个值或两个元组的元组的类型构造函数.它是一个与(,,)不同的类型,它是三元组的构造函数。同样,这两种类型都不同于(,,,),即4元组的构造函数,等等。
当您使用(Foo, Bar) -> Baz类型编写函数时,打字机将拒绝使用不同值的元组(或根本不是元组的内容)调用函数的任何尝试。因此,您的isTuple函数只有一个逻辑实现,
isTuple :: (a, b) -> Bool
isTuple _ = True…因为不可能用一个不是二元组的值来实际调用isTuple。
如果不使用类型类,就不可能在Haskell中编写接受任意大小的元组的函数;也就是说,您不可能对元组的大小具有多态性。这是因为,与列表不同,元组是异构的--它们可以包含不同类型的值。接受不同长度的元组的函数无法预测元组的哪些元素属于哪种类型,因此它实际上无法做任何有用的事情。
很少有,当进行高级的、类型级别的欺骗时,有一个表示不同长度的元组的类型是有用的,在Haskell中,它通常被称为HList (用于异构列表)。这些可以实现为一个库使用花哨的类型化机器和类型级别的编程。但是,如果您是初学者,这肯定是而不是您想要的。
实际上很难给出你应该做什么的建议,因为正如一位评论者所指出的,你的问题读起来像an XY problem。考虑问一个不同的问题,它提供了更多关于你实际上试图解决的问题的背景,这使得你首先想找到一个元组的列表,你很可能会得到更有帮助的答案。
https://stackoverflow.com/questions/53365842
复制相似问题