Multiple Patterns in 1 case

前端 未结 3 1963
囚心锁ツ
囚心锁ツ 2021-01-18 08:40

In SML, is it possible for you to have multiple patterns in one case statement?

For example, I have 4 arithmetic operators express in string, \"+\", \"-\", \"*

3条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-18 09:24

    Given that you've tagged your question with the smlnj tag, then yes, SML/NJ supports this kind of patterns. They call it or-patterns and it looks like this:

    case str of
      ("+" | "-") => print "PLUS MINUS"
    | ("*" | "/") => print "MULT DIV"
    

    Notice the parentheses.

    The master branch of MLton supports it too, as part of their Successor ML effort, but you'll have to compile MLton yourself.

    val str = "+"
    
    val _ =
      case str of
        "+" | "-" => print "PLUS MINUS"
      | "*" | "/" => print "MULT DIV"
    

    Note that MLton does not require parantheses. Now compile it using this command (unlike SML/NJ, you have to enable this feature explicitly in MLton):

    mlton -default-ann 'allowOrPats true' or-patterns.sml
    

提交回复
热议问题