我正在尝试实现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 回答
当错误消息提示时,您遇到了值限制 - 请参阅here以获取解释 . 解决方案非常简单:只需"eta-expand"您的定义,即使参数显式而不是依赖于部分应用程序: