Function SML函数作为查找表

Function SML函数作为查找表,function,sml,lookup-tables,Function,Sml,Lookup Tables,在研究SML中的类型时,我发现 fun monthI2S 1 = "January" | monthI2S 2 = "February" | monthI2S 3 = "March" | monthI2S 4 = "April" | monthI2S 5 = "May" | monthI2S 6 = "June" | monthI2S 7 = "July" | monthI2S 8 = "August" | monthI2S 9 = "September" |

在研究SML中的类型时,我发现

fun monthI2S 1 = "January"
  | monthI2S 2 = "February"
  | monthI2S 3 = "March"
  | monthI2S 4 = "April"
  | monthI2S 5 = "May"
  | monthI2S 6 = "June"
  | monthI2S 7 = "July"
  | monthI2S 8 = "August"
  | monthI2S 9 = "September"
  | monthI2S 10 = "October"
  | monthI2S 11 = "November"
  | monthI2S 12 = "December"
在我看来,它就像一个用作查找表的函数。(实际上,我甚至不知道这种类型的SML函数叫什么。它看起来像哈斯克尔归纳公式?)有没有办法通过处理输入为
12
的情况而不得到“非穷举”警告

fun monthI2S m = if m <= 0 orelse M > 12 then NONE else ...?
  | monthI2S 1 = "January"
  | monthI2S 2 = "February"
  | monthI2S 3 = "March"
  | monthI2S 4 = "April"
...
fun monthI2S m=如果是m 12,那么就没有其他的了。。。?
|monthI2S 1=“一月”
|monthI2S 2=“二月”
|monthI2S 3=“三月”
|monthI2S 4=“四月”
...

显然不起作用,因为我无法协调
else
|…
。或者我只是完全找错了方向,应该使用类似于大小写的方法吗?

模式匹配从最上面的子句开始到最下面,所以您希望最一般的大小写放在最后

fun monthI2S 1 = "January"
  | monthI2S 2 = "February"
  ...
  | monthI2S m = nothing else matched, so m must be < 1 or > 12...

模式匹配从最上面的子句向最下面进行,所以您希望最一般的情况排在最后

fun monthI2S 1 = "January"
  | monthI2S 2 = "February"
  ...
  | monthI2S m = nothing else matched, so m must be < 1 or > 12...
“style”不是一个有名称的样式,它是一个有许多模式匹配子句的常规函数。“style”不是一个有名称的样式,它是一个有许多模式匹配子句的常规函数。