SML中的嵌套case语句

sla*_*h3r 16 coding-style sml

这更像是一个风格问题而不是其他任何问题.鉴于以下代码:

case e1 of                    (* datatype type_of_e1  = p1 | p2 *)
    p1 => case e11 of         (* datatype type_of_e11 = NONE | SOME int *)
              NONE => expr11
            | SOME v => expr12 v
  | p2 => case e21 of         (* datatype type_of_e21 = NONE | SOME string *)
              NONE => expr21
            | SOME v => expr22 v
Run Code Online (Sandbox Code Playgroud)

有没有办法解决types of rules don't agree因尝试将e11模式匹配到p2而导致的错误,而不是将p1的表达式括在括号中?在P2模式还有另外一个case语句,避免"只是切换模式"答案;-).

更新:更改代码以反映更具体的情况

Ber*_*liv 14

答案是"("和")".我的例子:

case e1 of                   
   p1 => ( case e11 of         
              NONE => expr11
              | SOME v => expr12 v )
   | p2 => ( case e21 of         
                NONE => expr21
                | SOME v => expr22 v )
Run Code Online (Sandbox Code Playgroud)

这确实有效!很酷:)你也可以尝试一下.


Lar*_*rom 8

否.标准ML的定义中的句法规则表明案例表达式的匹配臂试图最大限度地消耗潜在的子句.而且,由于没有"结束的情况下"或类似标记的语言,解析器会欢快地吃各的"|拍拍=> EXP"那你给它,直到它看到的东西,终止比赛条款清单条款.