Sml 标准ML函数解释

Sml 标准ML函数解释,sml,ml,Sml,Ml,我对标准ML有点陌生,我必须编写两个函数,其中一个必须查找列表中是否存在元素,另一个必须从同一列表中选择第一个元素,如果它符合第一个函数中的条件 到目前为止,我遇到了这个例子: fun contains _ [] = true | contains [] (x::xs) = false | contains ys (x::xs) = (mem ys x) andalso (contains ys xs) 示例结果如下: contains [1,2,3] [3,2] (* return

我对标准ML有点陌生,我必须编写两个函数,其中一个必须查找列表中是否存在元素,另一个必须从同一列表中选择第一个元素,如果它符合第一个函数中的条件

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

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


提前谢谢你

如果第二个列表为空,则函数返回true。如果第一个列表为空,则返回false,除非没有为空列表正确定义mem,否则该大小写似乎是多余的。如果两个列表均为非空,则当mem ys x为真且包含ys xs is真时返回真

换句话说,此函数相当于List.forall,其中mem ys作为谓词函数


假设mem ys x返回true iff x是ys的成员,这意味着包含ys xs返回true iff xs的每个成员也是ys的成员。

非常感谢!你对第二个功能有什么建议吗?