我的学校作业有点问题。我必须编写代码,它将在列表列表中找到任何 x(整数或字母)。
我有这样的东西:
find x xxs = [ [ x | x <- xs, x `elem` xs ] | xs <- xxs ]
Hugs98 无一异常(exception)地接受它,但它不起作用。
Input: find 2 [[1,1,1,1],[4,4,4,4],[3,3,3]]
Output: [[1,1,1,1],[4,4,4,4],[3,3,3,3]]
最佳答案
稍微重命名一下,我想你刚刚写了这个:
find x yss = [ [ y | y <- ys, y `elem` ys ] | ys <- yss ]
我认为这不是你的本意。 (在您的代码中,您有两个名为 x
的变量,一个隐藏另一个。)
您的问题并未说明您可以使用或不允许使用哪些工具。
显然elem
在列表中查找内容。通过“查找”,我的意思是它返回一个 Bool
指示目标项是否存在。但如何处理列表列表呢?
列表理解总是返回一个列表,因此如果您希望 find
返回 Bool
,则不需要列表理解。
您可以使用 map
将 elem
应用于列表列表中的每个列表 - 但现在您有一个 Bool
列表。有两种方法可以解决这个问题。一种稍微笨拙的方法是使用 elem
来查看列表中是否在任何地方包含 True
。但更明智的方法是使用内置的 or
函数,该函数对 Bool
列表进行逻辑或。 (还有相应的and
函数。)
find x yss = or (map (x `elem`) yss)
还有另一种方法可以做到这一点;有一个名为 any
的内置函数,它将函数应用于内容列表,并在提供的函数返回 True
时返回 True
。所以你可以这样做
find x yss = any (x `elem`) yss
关于list - 在列表列表中查找 x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15240715/