【发布时间】:2021-12-29 00:16:21
【问题描述】:
我有一个包含元组元素的列表示例:
[(1,2),(3,9),(7,9),(6,4),(1,2),(4,2),(3,9),(1,2)]
我需要将第一个元素与其余元素进行比较,然后将第二个元素与列表的其余部分进行比较,依此类推以返回重复的元素
在这种情况下它应该返回
(1,2),(1,2),(1,2),(3,9),(3,9)
知道如何实现它吗?
我已经实现了
test :: Eq a => [(a,a)] -> [(a,a)]
test [(x,y)] = [(x,y)]
test (x:y:xs)
|((fst (x) == fst (y)) && (snd (x) == snd (y))) = ( [y]) ++ (test (x:xs) )
|otherwise = test (x:xs)
结束条件不好,总是返回列表的最后一个元素
test [(x,y)] = [(x,y)]
它只将第一项与列表的其余部分进行比较,但我需要将第二个、第三个...与列表的其余部分进行比较
【问题讨论】:
-
提示:
import Data.List (partition); test (x:xs) = _ where (ys,zs) = partition _ _ -
为什么这仅限于配对?你不能写
test :: Eq a => [a] -> [a],然后用一对列表来称呼它吗?你让自己的生活变得更加艰难,同时让你的功能变得不那么有用。