SML案例和模式匹配

时间:2013-01-30 12:06:59

标签: pattern-matching sml smlnj

我有以下函数,假设返回卡的值。我不知道为什么Num => Num发出以下错误:

  

错误:规则类型不一致,早期规则排名 - >在此规则中   秩> INT->秩

为什么Num => Num有返回类型rank-> int-> rank

 datatype suit = Clubs | Diamonds | Hearts | Spades
 datatype rank = Jack | Queen | King | Ace | Num of int 
 type card = suit * rank


 fun card_value (suit, rank)=
 case rank of
    Ace =>11
     | Jack =>10
     | King =>10
     | Queen =>10
     | Num => Num ;


card_value(Clubs,Ace); //calling function

1 个答案:

答案 0 :(得分:8)

错误消息是指示性的。您需要为所有模式使用相同的返回类型。

fun card_value (suit, rank) =
  case rank of
      Ace => 14
    | King => 13
    | Queen => 12
    | Jack => 11
    | Num i => i

因此,您必须指定正确的构造函数Num i(仅限Num)并将i作为int

返回