标准ML:搜索元组列表

时间:2017-06-20 21:55:57

标签: list functional-programming sml smlnj

我试图在SML中编写一个函数来搜索元组列表中的字符串,如果它在元组的第一个元素中找到字符串,它将返回第二个元素。

fun getFromBlist (name : command, (x,y)::tail : (command*command) list) = 
    if x = name then y else getFromBlist(name, tail)
    | getFromBlist(name, []) = ***** WHAT GOES HERE?!? *****

我可以使用任何可以返回基本情况的东西吗?我尝试的一切,我得到一个错误。我也欢迎其他建议,谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用Option结构为基本案例返回NONE, 我稍微重新格式化了代码,将基本案例放在第一位,

除了为匹配返回SOME y,为基本情况返回NONE。 从那里你可以使用case语句或模式匹配来检索结果。

type command = string;

fun getFromBlist(name, []) = NONE
  | getFromBlist (name : command, (x,y)::tail : (command*command) list) =
    if x = name
      then SOME y
      else getFromBlist(name, tail);

或者,根据您的需要,对于基本情况,您可以返回空字符串"",并按原样返回y。它取决于空字符串是否是有效命令,并且您想区分它和基本情况。

但总结基本情况,以及然后的结果 必须返回相同的类型,无论是字符串,还是选项