假设我们有一个元素列表:
[(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
如果要检查这两个项目是否都引用内存中的同一实体,也可以使用。
这是有关如何自己编写此内容的提示。处理列表的自然方法是首先查看第一个元素,然后递归检查列表的其余部分,直到您有一个空列表。对于这个问题,你可以用英文陈述算法如下:
如果列表为空,则该项目不在列表中,否则如果第一个列表元素等于该项目,则它在其中,否则它是(该项目在列表的其余部分中吗?)的答案
现在您只需将其转换为 OCaml 代码(使用递归函数)。
一般来说,如果你可以用问题的更小或更简单的部分来描述你想要做什么,那么编写递归代码就很简单了(尽管你必须小心基本情况是正确的)。当使用列表或树结构数据时,分解问题的方法通常很明显。