好的,所以我开始为一堂课学习 SML,但我坚持使用选项结构。到目前为止,我对这个例子有什么:
datatype suit = spades|hearts|clubs|diamonds;
datatype rank = ace|two|three|...|j|q|k|joker;
type card = suit*rank;
我的讲师试图解释期权结构的使用,他说并非所有的牌都一定有花色。小丑没有与之相关的西装。所以在设计一个函数getsuit来得到一张牌的花色时,我们有以下几点:
datatype 'a option = NONE | SOME of 'a;
fun getsuit ((joker,_):card):suit option = NONE
| getsuit ((_,s):card):suit option = SOME s;
但是使用 emacs,我得到两个错误,一个说模式和约束不同意,
pattern: rank * ?.suit
constraint: rank * suit
另一个说表达式类型和结果类型不一致。
expression: ?.suit option
result type: suit option
这是讲师提供的代码,很明显,如果它导致错误,它们并没有多大帮助。“?”是什么意思。为什么会出现?我将如何正确定义此功能?