Haskell 广义元组约简
如何编写将n-tuple简化为(n-m)-tuple的函数 例如,我有Haskell 广义元组约简,haskell,Haskell,如何编写将n-tuple简化为(n-m)-tuple的函数 例如,我有(a,b,c,d,e),想得到(a,b,c) 它的用法是 let ntup = (1, "a", "b", 5, "c") nmtup = reduce ntup 3 似乎有类似的问题的解决方法(例如),但是我强烈建议你考虑改变数据类型,因为元组不是要在这样的上下文中使用。元组并不意味着以某种方式对元素进行迭代,而是对元素(固定数量)进行模式匹配。 另一种选择可能是数据类型,正如我给您链接的问题的一个答案中所提到
(a,b,c,d,e)
,想得到(a,b,c)
它的用法是
let ntup = (1, "a", "b", 5, "c")
nmtup = reduce ntup 3
似乎有类似的问题的解决方法(例如),但是我强烈建议你考虑改变数据类型,因为元组不是要在这样的上下文中使用。元组并不意味着以某种方式对元素进行迭代,而是对元素(固定数量)进行模式匹配。
另一种选择可能是数据类型,正如我给您链接的问题的一个答案中所提到的。事实上,可以指出的是,只应该使用2元组,所有较大的数据都应该是记录或列表(具有变体类型或异构).你能给我指一些能更好地解释这句话的参考资料吗?听起来很有趣!谢谢好吧,只是当你和pairs呆在一起时,你只需要构建简洁的管道等等,就是
fst
,snd
和箭头组合符第一个
,第二个
,和&&
和***
。当您允许较大的元组时,辅助程序的数量将以二次方式(如果不是指数方式)增长,否则您需要多态签名,这会使类型推断过于复杂。你可以使用镜头(\u1
,\u2
),但这很快就会让人困惑。无论是否使用镜头,命名记录字段都更清晰。如果使用较大的元组,那么((a,b,c)
实际上比(a,b,c)
更方便!谢谢搬到HList,我想在没有太多额外工作(添加新库)的情况下进行转换,但最终没有香草哈斯克尔方法。要做到这一点,您需要一些奇特的类型操纵。