所以我想做一个接收对列表并给出该对的第一个元素的函数,问题是我只知道如果它只有1对就如何编写对列表
primeiros :: [(a,b)] -> [a]
primeiros (a,b) = undefined
但问题是我不知道怎么写如果超过1对,我试过这个:
primeiros [(a,b),(as,bs)] = undefined
但是这显然不会起作用,因为如果列表有2对,它只会做一些事情,我想要一些适用于任何对的东西。
答案 0 :(得分:2)
您创建一个包含第一个元素的列表,如下所示:
primeiros :: [(a,b)] -> [a]
primeiros (x:xs) = [fst x] ++ primeiros xs
fst
会返回一对中的第一个元素,您也可以使用map
:
primeiros :: [(a,b)] -> [a]
primerios = map fst
答案 1 :(得分:0)
您可以像这样创建一对:
Prelude> (42, "Foo")
(42,"Foo")
这是一对,其中第一个元素是数字,第二个元素是String
。
该对是两个值,但您也可以将其视为单个值。
编写值列表的一种方法是这样的:
Prelude> [1,5,2,7,1337]
[1,5,2,7,1337]
这是五个数字的列表。
编写相同列表的另一种方法是这样的:
Prelude> 1:5:2:7:1337:[]
[1,5,2,7,1337]
现在您已经知道如何将一对编写为单个元素,以及如何编写元素列表,我相信您可以弄清楚如何编写对列表。