Haskell比较元素[[]]
我正在用Haskell处理小程序。 也许答案很简单,但我试着得不到结果。 所以我在程序的部分之一是列表Haskell比较元素[[]]
first = [(3,3),(4,6),(7,7),(5,43),(9,9),(32,1),(43,43) ..]
,并根据该列表我要做出新的一个与元素是在()=
result = [3,7,9,43, ..]
如果相等你有时间和耐心,我将不胜感激
回答:
即使你似乎没有做出最小的努力来自己解决这个问题,我会给你答案,因为它是如此微不足道,因为Haskell是一门伟大的语言。
与此签名创建一个函数:
findIdentical :: [(Int, Int)] -> [Int]
它需要一个元组列表,并返回整数的列表。
这样实现:
findIdentical [] = [] findIdentical ((a,b) : xs)
| a == b = a : (findIdentical xs)
| otherwise = findIdentical xs
正如你所看到的,findIdentical
是一个递归函数,两个项目之间的平等比较的元组,然后如果发现平等把它添加到结果列表。
回答:
你可以做这个例如列表理解。我们迭代遍历first
中的每个元组f,s)
,所以我们在列表理解的右侧编写(f,s) <- first
,并且需要对f
和s
相等的事实进行过滤,所以f == s
。在这种情况下,我们将f
(或s
)添加到result
。所以:
result = [ f | (f,s) <- first, f == s ]
我们可以把它变成是作为输入的2元组[(a,a)]
名单,而这两个元素进行比较,并返回一个列表[a]
功能:
f :: Eq a => [(a,a)] -> [a] f dat = [f | (f,s) <- dat, f == s ]
回答:
一个简单的方法来做到这一点是使用前奏的filter
功能,它具有类型定义:
filter :: (a -> Bool) -> [a] -> [a]
所有你需要做的是如何筛选列表中的元素供应谓语和要过滤的列表。您可以轻松地做到以下这一点:
filterList :: (Eq a) => [(a, a)] -> [a] filterList xs = [x | (x, y) <- filter (\(a, b) -> a == b) xs]
预期其行为:
*Main> filterList [(3,3),(4,6),(7,7),(5,43),(9,9),(32,1),(43,43)] [3,7,9,43]
以上是 Haskell比较元素[[]] 的全部内容, 来源链接: utcz.com/qa/262526.html