嵌套列表中的 Haskell `elem`

cod*_*oob 5 haskell nested list

我想检查嵌套列表中的元素。

我已经尝试了几种方法,但总是会得到错误的结果或一些错误。

[X] `elem` [[X,X,X],[O,O,O]]
Run Code Online (Sandbox Code Playgroud)

返回 False 但应该为 True

X `elem` [[X,X,X],[O,O,O]]
Run Code Online (Sandbox Code Playgroud)

抛出错误,类型无法匹配。

我在这里错过了什么吗?

Wil*_*sem 4

[X]列表的元素是子列表,列表中没有子列表。

您可以检查子列表中是否有任何元素包含X

any (elem X) [[X, X, X], [O, O, O]]
Run Code Online (Sandbox Code Playgroud)

或使用elemas 中缀运算符:

any (X `elem`) [[X, X, X], [O, O, O]]
Run Code Online (Sandbox Code Playgroud)

但它们在语义上是完全相同的。

这些将检查任何子列表(此处[X, X, X][O, O, O]X是否是这些列表的元素。

正如@amalloy 所描述的,另一种选择是将所有子列表连接到一个列表中,然后对elem这些子列表进行检查,因此:

elem X (concat [[X, X, X], [O, O, O]])
Run Code Online (Sandbox Code Playgroud)

  • 或者,“elem X (concat xs)”。 (3认同)