标准ML功能说明

时间:2014-10-21 09:13:42

标签: sml ml

我是标准ML的新手,我必须编写2个函数,其中一个必须查找列表中是否存在元素,另一个必须从同一列表中选择第一个元素(如果匹配)第一个函数的标准。

到目前为止,我遇到了这个例子:

fun contains _ [] = true
  | contains [] (x::xs) = false
  | contains ys (x::xs) = (mem ys x) andalso (contains ys xs)

示例结果如下:

contains [1,2,3] [3,2]  (* returns true *)
contains [1,2,3] [3,2,3]  (* returns true *)
contains [1,2,3] [3,4,2]  (* returns false *)

我很想使用List.exists,但我必须使用递归。 有人可以解释一下这个函数到底在做什么吗? 根据我的理解,如果列表为空,在第一行中它将返回false,但其余的和提供的示例对我来说并不是很清楚。另外,第二个函数的最佳方法是什么,如果我调用第一个函数,如果它返回true,那么只需要获取当前列表的hd?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果第二个列表为空,则该函数返回true。如果第一个列表为空,则返回false(除非为空列表没有正确定义mem,否则这种情况似乎是多余的)。如果两个列表都是非空的,则iff mem ys x为真且contains ys xs为真时返回true。

换句话说,此函数等效List.forallmem ys作为谓词函数。

假设mem ys x返回true如果xys的成员,则表示如果contains ys xs的每个成员也是xsys将返回true {{1}}的成员。