根据标题,尝试从以下函数返回字符串列表:
fun f (typ : 'Z list option ) : 'Z list =
case typ of
SOME x::xs' => x::xs'
来自终端的反馈如下:
hw2_1.sml:62.28-62.34错误:运算符和操作数不一致[循环性]运算符域:'Z*'Z列表操作数:"Z*"Z选项列表在表达式中:x::xs'
hw2_1.sml:61.5-62.34错误:事例对象和规则不一致[tycon不匹配]规则域:'Z选项列表对象:'Z列表选项在表达式中:(典型案例of::(SOME x,xs'(=>x::xs'(
它告诉我运算符域和操作数不一致。。。这是否意味着Z'列表选项不映射到SOME x::xs'所表示的类型?我显然没有以正确的方式思考这个问题。。。如果有任何提示,我们将不胜感激。
您不需要显式注释类型。你也可以写:
fun f typ =
case typ of
NONE => ...
| SOME (x::xs) => ...
或者你可以直接在函数中嵌入模式匹配:
fun f NONE = ...
| f (SOME (x::xs)) = ...
正如quoify所指出的,你遇到的问题与括号有关。
但我想指出的是,通过使类型隐含,可以使程序更容易阅读。
无论如何,它们都会被推断出来。