2010-03-18 46 views
2

如何将列表中的函数写入元组将函数列表写入元组

我已将字符串带到元组中。但我需要将它发送给一个元组。

有人可以帮助我

+3

你想解决什么问题? – MatrixFrog 2010-03-18 07:06:27

+0

可能的重复[如何将列表转换为Haskell中的元组?](http://stackoverflow.com/questions/2921345/how-do-i-convert-a-list-to-a-tuple-in -haskell) – 2013-01-17 01:20:32

回答

3

你不能一个任意长的列表,因为不同长度的元组被认为是不同的类型转换为一个元组。但你可以有:

listToTuple2 :: [a] -> (a, a) 
listToTuple3 :: [a] -> (a, a, a) 
listToTuple4 :: [a] -> (a, a, a, a) 
listToTuple5 :: [a] -> (a, a, a, a, a) 

http://www.haskell.org/haskellwiki/Template_Haskell#Convert_the_first_n_elements_of_a_list_to_a_tuple见。

+0

非常感谢。我找到了解决方案。但有一些小的澄清做 listtotuple :: [字符串] - >(字符串,字符串,字符串) listtotuple [] =错误 “空列表” listtotuple(A:B:C:d)=(A, b,c) 我试着只是把(a:b:c),但它不工作。然后我把另一个。那么它工作。有人可以解释为什么 – Nubkadiya 2010-03-18 07:24:51

+0

@Pradeep:'(:) :: a - > [a] - > [a]'的原因。 cons运营商的RHS必须是一个列表。你可以使用模式匹配'listtotuple [a,b,c] =(a,b,c)'。 – kennytm 2010-03-18 07:48:45

+1

'[a,b,c]'等同于'(a:b:c:[])',并且将匹配恰好三个元素的列表。要匹配三个或更多列表(并将名称绑定到前三个列表),可以使用'(a:b:c:d)',或者,因为在这种情况下,您不需要引用其余的列表为'd','(a:b:c:_)'。注意匹配空列表的'[]'与匹配任何列表的'_'或'd'之间的区别。 – Nefrubyr 2010-03-18 10:17:28