2011-11-30 126 views
1

有没有办法删除3元素元组的第一个元素,所以我得到了2元素元组而不必为此另外创建一个函数?删除3元素元组的第一个元素

(A,B,C) - >(B,C)

基本上我必须使用一个函数,该函数创建一个3元素的元组,然后我必须使用一个函数,它仅使用它的最后两个元素。

谢谢你的回答。

回答

11

你的问题几乎具有所需功能本身!

\(a,b,c)->(b,c) 

是您需要的功能。这是一个动态定义的“匿名”函数,您不必指定它的名字。因此,举例来说,如果你有

someFunc :: someType -> (Int, Char, Bool) 

你可以做

(\(a,b,c)->(b,c)) (someFunc someValue) 

得到的someFunc someValue第二和第三部分。

+0

其实,这是我想到的第一件事情,但*是*创建一个函数。我认为使用其他提供模式匹配的东西('let'或'where')更适合这样的问题。 –

+0

@TikhonJelvis:的确如此。但由于该函数被定义为“内联”,并且没有引入其他名称,所以我认为它不算太坏。 :-) – Prateek

+1

哈,那其实也是我的逻辑。但后来我想起了一些老师和平地学家可能会无意义地挑剔。 –

5

你可以用几个句法结构如let做模式匹配。所以,你可以这样做:

let (a, b, c) = triTuple in fn (b, c) 
1

您可以使用case

case x of (a, b, c) -> (b, c)