【问题标题】:custom map function standard ml自定义地图功能标准ml
【发布时间】:2012-10-04 21:27:38
【问题描述】:

我想做一个自定义的map函数,和sml中预定义的map函数做同样的事情,我写了如下代码:

fun mymap f = fn L => foldr f [] L;

这基本上是一个函数 f,它可以获取一个列表并将函数 f 应用于列表,因为 map 函数接受一个列表和函数并返回另一个列表,现在我得到的是:

val mymap = fn : ('a * 'b list -> 'b list) -> 'a list -> 'b list

但预定义的地图函数有以下输出:

val it = fn : ('a -> 'b) -> 'a list -> 'b list

我在这里遇到了什么问题? 谢谢

注意:我必须使用 foldr 或 foldl 函数并使用柯里化

【问题讨论】:

    标签: types map sml


    【解决方案1】:

    有什么问题?好吧,如您所见,问题在于函数的第一个参数 (f) 的类型错误,无法用作foldr 的第一个参数。您必须首先了解需要什么样的函数作为foldr 的第一个参数。

    【讨论】:

      【解决方案2】:

      嗯,你必须明白,对于你应用 foldr 的列表中的每个元素,它需要该列表的一个元素,即前一个结果(或起始值)并将两者都提供给作为第一个参数的函数文件夹。

      这意味着,在您编写的代码中,f 有两个参数。所以 f 需要一个列表的值 ('a) 和一个列表 ('b list),这给了我们类型:

      'a * 'b list -> 'b list
      

      但在 map 函数中,您希望 f 应用于每个列表元素,因此您需要将 foldr 的第一个参数抽象化,将 f 应用于列表元素,并将结果添加到输出列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2018-08-23
        • 2020-04-17
        • 2020-02-08
        • 1970-01-01
        相关资源
        最近更新 更多