我正在尝试generic_list
使用两个值构造函数定义一个新的多态类型:List
and Seq
,并添加map_function (proc, items)
映射proc
所有项目的函数。
这是我到目前为止所拥有的:
datatype 'a seq = Nil | Cons of 'a * (unit -> 'a seq);
datatype 'a generic_list = List of 'a list | Seq of 'a seq;
map_function
当我有以下要求时,我该如何构建:
- 签名:
generic_map (proc, items)
- 目的:与
map
类中定义的相同,但项目可以是常规列表或惰性列表。 - 类型:
fn: ('a -> 'b) * 'a generic_list -> 'b generic_list
例子:
generic_map (fn x => x + 10, List [1, 2, 3]); val it = List [12,13,14]: int generic_list generic_map (fn x => x + 10, Seq (Cons (1, fn () => Cons(2, fn () => Cons (3, fn () => Nil))))); val it = Seq (Cons (11, fn)): int generic_list