【问题标题】:Standard ML function explanation标准 ML 功能说明
【发布时间】:2014-10-21 17:33:05
【问题描述】:

我是标准 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?

提前谢谢你!

【问题讨论】:

    标签: sml ml


    【解决方案1】:

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

    换句话说,这个函数等价于List.forall,以mem ys作为谓词函数。

    假设如果xys 的成员,mem ys x 返回真,这意味着如果xs 的每个成员也是ys 的成员,contains ys xs 返回真。

    【讨论】:

    • 非常感谢!您对第二个功能有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2012-06-23
    • 2018-01-14
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多