【问题标题】:mapping lists in MLML 中的映射列表
【发布时间】:2013-06-13 19:19:36
【问题描述】:

我有一个关于 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)))))

我想知道这里有什么问题以及如何解决它以便编译,我找不到错误

【问题讨论】:

  • 问题是为什么它当然不能编译,我不明白错误在哪里

标签: list ml


【解决方案1】:

在“else”部分,您执行something :: generic_map (...),这意味着generic_map 必须返回list 而不是generic_list

另外,我根本看不出你在哪里处理 seq 案子。

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

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多