OCAML-列表中是否有元素?

OCAML-列表中是否有元素?,ocaml,Ocaml,假设我们有一个元素列表: [(a,b); (c,d); (e,f)] 什么函数会检查元素(比如A,其中A=(x,y))是否在列表中?使用list.mem搜索匹配项 let a = (3,4) List.mem a [(1,2); (3,4); (5,6)] 如果要检查这两个项目是否都引用了内存中的同一实体,也可以使用List.memq。使用List.mem搜索匹配项 let a = (3,4) List.mem a [(1,2); (3,4); (5,6)] 如果您想检查这两个项目是否都引

假设我们有一个元素列表:

[(a,b); (c,d); (e,f)]

什么函数会检查元素(比如A,其中A=(x,y))是否在列表中?

使用
list.mem
搜索匹配项

let a = (3,4)
List.mem a [(1,2); (3,4); (5,6)]

如果要检查这两个项目是否都引用了内存中的同一实体,也可以使用
List.memq

使用
List.mem
搜索匹配项

let a = (3,4)
List.mem a [(1,2); (3,4); (5,6)]

如果您想检查这两个项目是否都引用了内存中的同一实体,也可以使用
List.memq

这里有一个如何自己编写的提示。处理列表的自然方法是首先查看第一个元素,然后递归地检查列表的其余部分,直到得到一个空列表。对于此问题,您可以用英语说明算法,如下所示:

如果列表为空,则该项不在列表中, 否则,如果第一个列表元素等于该项,则它位于, 否则就是答案(该项目是否在列表的其余部分?)

现在您只需要将其转换为OCaml代码(使用递归函数)


一般来说,如果您可以用问题的更小或更简单的部分来描述您想要做什么,那么编写代码是很简单的(尽管您必须注意基本情况是正确的)。当使用列表或树结构数据时,分解问题的方法通常是显而易见的。

这里有一个关于如何自己编写的提示。处理列表的自然方法是首先查看第一个元素,然后递归地检查列表的其余部分,直到得到一个空列表。对于此问题,您可以用英语说明算法,如下所示:

如果列表为空,则该项不在列表中, 否则,如果第一个列表元素等于该项,则它位于, 否则就是答案(该项目是否在列表的其余部分?)

现在您只需要将其转换为OCaml代码(使用递归函数)


一般来说,如果您可以用问题的更小或更简单的部分来描述您想要做什么,那么编写代码是很简单的(尽管您必须注意基本情况是正确的)。使用列表或树结构数据时,分解问题的方法通常是显而易见的。

谢谢,这确实有效。我只是想知道是否有任何方法可以编写自己的函数,以同样的方式检查列表,返回ig true或false;非常可读。谢谢你,这真的很有效。我只是想知道是否有任何方法可以编写自己的函数,以同样的方式检查列表,返回ig true或false;它可读性很强。