【发布时间】:2017-06-07 05:36:32
【问题描述】:
我尝试在 web 和 stackexchange 中搜索,但令人惊讶的是,没有人问如何在 Haskell 中以下面的形式计算元组的长度。
假设您在 Haskell 中有 (1,2,3,4) 或 (1,3,5,6,7) 之类的元组,并希望编写计算元组长度的长度函数。我怎样才能做到这一点?对于列表,我知道如何在不显式调用内置函数的情况下使用递归来做到这一点。但是元组不同,我不能用“头”-“尾”区分。
该方法是否涉及创建新的数据类型?
【问题讨论】:
-
这样的函数的类型是什么?
-
这就是问这个问题的重点。我无法理解这将如何成为可能。不同长度的元组不会共享相同的类型,我不知道如何利用创建新的数据类型来支持长度函数。
-
出于好奇,您为什么要这样做?元组的长度在编译时是固定的,所以不需要“计算”任何东西。您可以使用
class TupLen a where tupLen :: a -> Int之类的类型类和instance TupLen (a, b) where tupLen _ = 2等,但这不是很有用。
标签: haskell