我正在尝试使用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 =黑桃或黑桃条,以及用不同的方式编写它,但它们都无法正常工作,并显示不同的错误。
答案 0 :(得分:3)
在SML中,用于缩短连词和析取词的关键字是andalso
和orelse
。
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