List ML中的映射列表

List ML中的映射列表,list,ml,List,Ml,我对ML中的映射列表有一个问题。这个问题似乎在重复,我定义了当前的数据类型: datatype 'a seq = Nil | Cons of 'a * (unit -> 'a seq); datatype 'a generic_list = List of 'a list |Seq of 'a seq; 我现在尝试编写以下函数,该函数应该接收“'a generic_list”并返回“int generic_list”: val rec

我对ML中的映射列表有一个问题。这个问题似乎在重复,我定义了当前的数据类型:

datatype 'a seq = Nil | Cons of 'a * (unit -> 'a seq);
datatype 'a generic_list = List of 'a list
                          |Seq of 'a seq;
我现在尝试编写以下函数,该函数应该接收“'a generic_list”并返回“int generic_list”:

val rec generic_map = fn (f,List(lst)) => if lst=nil then List([])                                             
      else List(f(List.hd(lst))::generic_map(f,List( List.drop(lst,1))));
该代码未编译,错误为:子句右侧不符合函数结果类型[tycon mismatch]表达式:

'Z generic_list
 result type:  'Z list
 in declaration:
   generic_map =
     (fn (f,List lst) =>
           if lst = nil
           then List nil
           else List
                  (f (List.hd lst) ::
                     generic_map (f,List (List.drop (lst,1)))))

我想知道这里的问题是什么,我如何修复它,以便它能够编译,我找不到错误

在“else”部分,你做了
something::generic_map(…)
,这意味着
generic_map
必须返回
列表,而不是
generic_list

另外,我看不出您在哪里处理
seq
案例


一般来说,我强烈建议使用模式匹配,而不是使用
if
List.hd
和friends。特别是像
lst=nil
这样的比较总是错误的,因为它将列表限制为具有相等类型的元素——使用模式匹配,或者至少使用
List.null
谓词当然,我不明白错误在哪里