基于这个定义:
附加列表是列表抽象数据类型的(简单)实现,它使构造成本低(O(1)),但破坏成本高(O(n))。和'a alistNN
类型'a alist
定义如下:
datatype 'a alistNN = Sing of 'a | Append of 'a alistNN * 'a alistNN
datatype 'a alist = Nil | NonNil of 'a alistNN
类型代表“'a alistNN
非零”附加列表,而'a alist
类型代表任意(零或非零)附加列表。
我要求将地图函数定义为:
fun alistMap (f: 'a -> 'b) (xs: 'a alist): 'b alist =
这在附加列表上执行映射。
我将其定义如下:
fun alistMap (f: 'a -> 'b) (xs: 'a alist): 'b alist =
case xs of
Nil => Nil
| NonNil xs =>
let
fun mapNN(f: 'a -> 'b) (xs: 'a alist): 'b alist =
case xs of
Sing x => Sing (f x)
| Append (ys, zs) =>
let
val ws = mapNN f ys
val ts = mapNN f zs
in
alistAppend (ys , zs)
end
in
mapNN f xs
end
我不断遇到冲突的类型,尤其是:
Sing x => Sing (f x)
知道可能是什么原因造成的吗?