在SML中简单实现flatten有问题

时间:2014-05-17 04:02:56

标签: sml

我试图实施展平:'列表 - > ' 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)

1 个答案:

答案 0 :(得分:3)

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

fun flatten xs = List.reduce op@ [] xs
相关问题