自定义地图功能标准ml

时间:2012-03-26 00:11:51

标签: types map sml

我想制作一个自定义地图函数,它与sml中的预定义地图函数做同样的事情,我编写了以下代码:

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功能并使用currying

2 个答案:

答案 0 :(得分:1)

有什么问题?好吧,正如您所看到的,问题是您的函数的第一个参数(f)具有错误的类型,可用作foldr的第一个参数。您必须首先了解需要哪种函数作为foldr的第一个参数。

答案 1 :(得分:1)

嗯,你必须明白,对于你应用foldr的列表中的每个元素,它需要该列表的一个元素,前一个结果(或起始值)并且给两个函数都是第一个参数折叠。

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

'a * 'b list -> 'b list

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