【问题标题】:How to check if x value exists in SML List如何检查 SML 列表中是否存在 x 值
【发布时间】:2017-09-06 06:45:54
【问题描述】:

我需要编写一个 SML 函数,该函数将一个元组列表(x 和 y 坐标)和一个整数值作为输入。如果整数是列表中的 x 值,则该函数需要返回 true,否则返回 false。例如,如果列表是:

val list = [(1,1),(2,4),(3,9),(4,16)];

函数的行为如下:

memberOf(2, list) = true
memberOf(4, list) = true
memberOf(9, list) = false

有人可以帮我写一个函数来完成这个吗?我只需要测试x值是否在列表中,元组的y值不重要。

谢谢!

【问题讨论】:

  • 你有没有尝试过?你在哪里卡住了?
  • 是的,我尝试修改一个基本的 memberOf 函数,该函数检查一个值是否存在于整数列表中。我正在努力让该函数检查元组列表中的 x 值,而不仅仅是整数列表。
  • 您可以尽最大努力解决问题。

标签: list functional-programming sml ml


【解决方案1】:
fun member_of (item, list) = List.exists (fn (x,y) => x = item) list

【讨论】:

  • 匿名函数应该只是fn x => x = item吗?
  • 否;传递给List.exists 的函数对列表的元素进行操作,这些元素是对的。
  • 啊,感谢您指出这一点。没有意识到列表元素是对的。
【解决方案2】:

您可以使用#1 tuple 访问元组的第一个参数,使用#2 tuple 访问第二个参数。因此,您检查该项目是作为第一个参数还是作为元组列表的第二个存在,直到到达列表的末尾。

(* fn : int * (int * int) list -> bool *)
fun exists_in (item: int, mylist: (int*int) list) =
    if null mylist
    then false
    else if #1 (hd mylist) = item orelse #2 (hd mylist) = item
    then true
    else exists_in (item, tl mylist)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2021-06-02
    • 2020-06-15
    • 2018-11-14
    相关资源
    最近更新 更多