在SML中使用模式匹配进行类型转换:fun 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'列表选项不会映射到某些x :: xs'在表示类型方面是否强?我显然不是在考虑这种正确的方法……不胜感激。

解决方法

您不需要显式注释类型。您也可以只写:

fun f typ =
    case typ of
         NONE => ...
       | SOME (x::xs) => ...

或者您可以直接在功能中嵌入模式匹配:

fun f NONE = ...
  | f (SOME (x::xs)) = ...

正如quoify所指出的那样,您遇到的问题与括号有关。

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

反正他们将是inferred

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...