Types 自定义映射函数标准ml

Types 自定义映射函数标准ml,types,map,sml,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 但预定义映射函数具有以下输出: v

我想创建一个自定义映射函数,该函数与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

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

的第一个参数。您必须了解,对于应用foldr的列表中的每个元素,它都会获取该列表中的一个元素、先前的结果(或起始值),并将这两个参数都提供给作为foldr第一个参数的函数

这意味着,在您编写的代码中,f接受两个参数。因此f取一个list(
'a
)和一个list(
'b list
)的值,这给了我们类型:

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