OCAML - 列表中的元素是什么?

时间:2013-04-08 19:45:41

标签: ocaml

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

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

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

2 个答案:

答案 0 :(得分:3)

使用List.mem搜索匹配项。

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

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

答案 1 :(得分:0)

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

  

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

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

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