Nested case statements in SML

后端 未结 3 887
深忆病人
深忆病人 2021-02-19 00:03

This is more of a stylistic question than anything else. Given the following piece of code:

case e1 of                    (* datatype type_of_e1  = p1 | p2 *)
           


        
相关标签:
3条回答
  • 2021-02-19 00:35

    Plain and short answer: no. But what's wrong with parentheses?

    (Of course, you can also bracket in other ways, e.g. with a 'let', or by factoring into auxiliary functions, but parentheses are the canonical solution.)

    0 讨论(0)
  • 2021-02-19 00:56

    No. The syntactic rules in the Definition of Standard ML state that the match arms of a case expression attempt to maximally consume potential clauses. And since there's no "end case" or similar marker in the language, the parser will merrily eat each of the "| pat => exp" clauses that you feed it until it sees something that terminates a list of match clauses.

    0 讨论(0)
  • 2021-02-19 00:58

    The answer is "(" and ")". My example:

    case e1 of                   
       p1 => ( case e11 of         
                  NONE => expr11
                  | SOME v => expr12 v )
       | p2 => ( case e21 of         
                    NONE => expr21
                    | SOME v => expr22 v )
    

    This really works! Cool :) You can try it too.

    0 讨论(0)
提交回复
热议问题