是否可以在SML中使用给定值进行模式匹配?

时间:2013-01-23 21:11:15

标签: pattern-matching sml

在Scala中它是可能的,所以我想知道这在SML中是否可行,考虑这样的代码:

fun in_list(elem,coll) =   
  case coll of
      [] => false
    | elem :: tail => true
    | head :: tail => in_list(elem,tail);

case的第二行中,我想从参数中使用elem,但SML将其视为占位符并在冗余大小写(第三行)上抛出错误。

那么 - 是否可以在这里使用elem,如果可以,如何使用?

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。您必须使用if

fun in_list(elem,coll) =   
  case coll of
      [] => false
    | head :: tail =>
        if head = elem
        then true
        else in_list(elem,tail)

或者,在这种情况下,您也可以使用逻辑运算符而不是if

fun in_list(elem,coll) =   
  case coll of
      [] => false
    | head :: tail =>
        head = elem orelse in_list(elem,tail)