假设我们有一个元素列表:
[(a,b); (c,d); (e,f)]
什么函数会检查元素(让我们说A,其中A =(x,y))是否在列表中?
答案 0 :(得分:3)
使用List.mem
搜索匹配项。
let a = (3,4)
List.mem a [(1,2); (3,4); (5,6)]
如果你想检查这两个项是否都引用了内存中的同一个实体,你也可以使用List.memq
。
答案 1 :(得分:0)
这里有一个关于如何自己写这个的提示。处理列表的自然方法是首先查看第一个元素,然后递归检查列表的其余部分,直到您有一个空列表。对于这个问题,您可以用英语说明算法,如下所示:
如果列表为空,则该项目不在列表中, 否则,如果第一个列表元素等于该项目,那么它在, 否则它的答案是(项目是否在列表的其余部分?)
现在您只需要将其转换为OCaml代码(使用递归函数)。
一般情况下,如果您可以根据问题的较小或较简单的部分描述您想要做什么,那么编写recursive代码很简单(尽管您必须小心基本情况是正确的) 。使用列表或树状结构数据时,分解问题的方法通常很明显。