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,并且需要对fs相等的事实进行过滤,所以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

回到顶部