在 SML 中使用模式匹配到类型转换:有趣的 f (典型值: 'Z 列表选项) : 'Z 列表



根据标题,尝试从以下函数返回字符串列表:

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所指出的,你遇到的问题与括号有关。

但我想指出的是,通过使类型隐含,可以使程序更容易阅读。

无论如何,它们都会被推断出来。

最新更新