标准 ML:搜索元组列表

Standard ML : Searching a list of tuples

我正在尝试用 SML 编写一个函数来搜索元组列表中的字符串,如果它在元组的第一个元素中找到该字符串,它 return 就是第二个。

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

有什么我可以用于基本情况但 return 什么都没有的东西吗?我尝试的一切,都会出错。我也愿意接受这里的其他建议,谢谢。

您可以使用 Option 结构到 return NONE 作为基本情况, 我稍微重新格式化了代码,将基本情况放在第一位,

以及 returning 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);

或者,根据您的需要,对于基本情况,您可以 return 空字符串 "",和 return y,就像您最初所做的那样。这在某种程度上取决于空字符串是否是有效命令,并且您想区分它和基本情况。

但要总结基本情况,以及 then 的结果 必须 return 相同的类型,无论是 string,还是 option