尝试使用或在if else语句中出现错误

时间:2019-04-23 19:49:07

标签: sml

我正在尝试使用sml在if else语句中或内部编写函数cardcolor,如下所示

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

fun cardColor(x:suit,y:rank):color = if (x = Clubs) or (x = Spades) then Black else Red;

但显示此错误消息:

 assig4.m:7.53-7.55 Error: unbound variable or constructor: or
 assig4.m:7.57 Error: unbound variable or constructor: X
 assig4.m:7.38-7.88 Error: operator is not a function [tycon mismatch] 
   operator: bool   
   in expression:   
     (x = Clubs) <errorvar>

如何在if语句中更正评估2语句?我试过使用X =黑桃或黑桃条,以及用不同的方式编写它,但它们都无法正常工作,并显示不同的错误。

2 个答案:

答案 0 :(得分:3)

在SML中,用于缩短连词和析取词的关键字是andalsoorelse

fun cardColor(x : suit, y : rank) : color =
  if x = Clubs orelse x = Spades then Black else Red

答案 1 :(得分:1)

除了Andreas Rossberg的出色回答外,您还可以考虑使用模式匹配:

fun cardColor suit = case suit of
         Clubs    => Black
       | Spades   => Black
       | Diamonds => Red
       | Hearts   => Red