首页 文章

在SML中简单实现flatten有问题

提问于
浏览
0

我正在尝试实现flatten:'列表列表 - >'SML中的列表列表 . 我认为这应该是相对直接的更高阶函数 . 我的实施是

val flatten = List.reduce (op @) []

但是我得到一个奇怪的错误消息:“append.sml:1.6-1.36警告:由于值限制而未通用的类型变量被实例化为虚拟类型(X1,X2,...)” . 因此,当我尝试压平一个int列表列表时,我得到一个类型错误:

:> flatten [[1,2],[3]];

stdIn:2.1-2.20错误:运算符和操作数不一致[literal]

运营商域名: ?.X1 list list
操作数: int list list in expression:flatten((1 :: 2 :: nil)::(3 :: nil):: nil)

1 回答

  • 3

    当错误消息提示时,您遇到了值限制 - 请参阅here以获取解释 . 解决方案非常简单:只需"eta-expand"您的定义,即使参数显式而不是依赖于部分应用程序:

    fun flatten xs = List.reduce op@ [] xs
    

相关问题