【发布时间】:2018-11-18 21:54:14
【问题描述】:
有没有办法检查(,) 有多少元素?我知道我可以使用fst 和snd 访问元组的第一个和第二个元素,但是我认为我可以以某种方式对元素求和,然后将其与 fst 元组 snd 元组进行比较并像这样检查:
tuple = (1,2)
sum tuple == fst tuple + snd tuple
然后我在这种情况下得到 True,而在 triple = (1,2,3) 得到 False。不管怎样我不能问fst (1,2,3) 也不能问sum tuple
有没有办法检查我是否有一个元组?
类似这样的:
is_tuple :: (a,b) -> a
is_tuple (a,_) = a
但是当我输入元组时得到 True,当我给出 (1,2,3) 或 (1,2,3,4) 时得到 False 等等......作为输入。
即:
is_tuple :: Tuple -> Bool
is_tuple x = if x is Tuple
then True
else False
?
【问题讨论】:
-
您已经在编译时通过类型签名进行了检查。
-
不,所有各种元组都是不同且不相关的类型。
-
您不应该只使用列表吗?
-
这似乎是the XY problem 的一个典型例子。 @cheshire:你到底想完成什么?
-
@cheshire 首先是术语说明:
(x,y)和(x,y,z)都是元组。 2 元素元组的词是“pair”。现在,如果您有一个将一对作为参数的函数,并且您尝试使用一对以外的参数调用它,您将得到一个错误 - 在编译时。类型检查已经是一个内置功能。因此,您尝试编写的运行时检查将毫无意义。在您的假设函数返回 false 的情况下,代码一开始就无法编译。
标签: haskell