我试图实施展平:'列表 - > ' SML中的列表。 我认为这应该是相对直接的更高阶函数。我的实现是
val flatten = List.reduce (op @) []
但是我收到了一条奇怪的错误消息:" append.sml:1.6-1.36警告:输入vars不是因为 值限制被实例化为虚拟类型(X1,X2,...)"。因此,当我尝试压缩一个int列表列表时,我得到一个类型错误:
产品:>压扁[[1,2],[3]];
stdIn:2.1-2.20错误:操作员和操作数不同意[字面意思]
运营商域名:?。X1列表
操作数: int列表列表
表达式:
flatten((1 :: 2 :: nil)::(3 :: nil):: nil)
答案 0 :(得分:3)
当错误消息提示时,您遇到了值限制 - 请参阅here以获取解释。解决方案非常简单:只需“eta-expand”你的定义,即使参数显式而不是依赖于部分应用:
fun flatten xs = List.reduce op@ [] xs