1种情况下的多种模式

rlh*_*lhh 4 sml smlnj

在SML中,您是否可以在一个case语句中使用多个模式?

例如,我有4个算术运算符中的字符串表示,"+", "-", "*", "/"我想打印"PLUS MINUS"的是"+" or "-""MULT DIV",如果它是"*" or "/".

TL; DR:在某些地方,我可以简化以下内容以减少使用案例吗?

case str of
   "+" => print("PLUS MINUS")
 | "-" => print("PLUS MINUS")
 | "*" => print("MULT DIV")
 | "/" => print("MULT DIV")
Run Code Online (Sandbox Code Playgroud)

Ion*_*tan 7

鉴于您已使用标记标记了您的问题,那么是的,SML/NJ支持这种模式.他们称之为or-patterns,它看起来像这样:

case str of
  ("+" | "-") => print "PLUS MINUS"
| ("*" | "/") => print "MULT DIV"
Run Code Online (Sandbox Code Playgroud)

请注意括号.

作为Successor ML工作的一部分,MLton的主分支也支持它,但你必须自己编译MLton.

val str = "+"

val _ =
  case str of
    "+" | "-" => print "PLUS MINUS"
  | "*" | "/" => print "MULT DIV"
Run Code Online (Sandbox Code Playgroud)

请注意,MLton不需要parantheses.现在使用此命令编译它(与SML/NJ不同,您必须在MLton中显式启用此功能):

mlton -default-ann 'allowOrPats true' or-patterns.sml
Run Code Online (Sandbox Code Playgroud)