SML 函数和元组
SML Function and Tuples
SML 函数映射接受一个函数和一个列表,并将该函数应用于列表的元素。
具有以下类型的函数映射既是多态函数又是高阶函数。
fun map f [] = [] | map f (x::xs) = (f x)::(map f xs)
val it = fn : (’a -> ’b) -> ’a list -> ’b list
编写另一个函数 mymap,它接受两个函数 f 和 g 以及一个 2 元素元组列表。
它将 f 应用于元组的第一个元素,并将 g 应用于元组的第二个元素。
例如:
- fun sqr x = x* x;
val sqr = fn : int -> int
- fun cube x:real = x*x*x;
val cube = fn : real -> real
- mymap sqr cube [(1,2.0),(2,3.0),(3,4.0),(4,5.0)];
我不知道如何使用第一个函数映射,我需要第二个函数 mymap 的提示
你可以试试:
fun mymap f g l =
let
fun f1 f (h,h1) = (f(h),h1)
fun g1 g (h,h1) = (h,g(h1))
in
map (g1 g) (map (f1 f) l)
end
我们定义了两个以元组为参数的函数 f1、g1,这样我们就可以将 map 与 f1 和元组列表一起用于 g1。
示例:
- mymap sqr sqr [(4,9),(4,16),(9,4)];
val it = [(16,81),(16,256),(81,16)] : (int * int) list
SML 函数映射接受一个函数和一个列表,并将该函数应用于列表的元素。
具有以下类型的函数映射既是多态函数又是高阶函数。
fun map f [] = [] | map f (x::xs) = (f x)::(map f xs)
val it = fn : (’a -> ’b) -> ’a list -> ’b list
编写另一个函数 mymap,它接受两个函数 f 和 g 以及一个 2 元素元组列表。
它将 f 应用于元组的第一个元素,并将 g 应用于元组的第二个元素。
例如:
- fun sqr x = x* x;
val sqr = fn : int -> int
- fun cube x:real = x*x*x;
val cube = fn : real -> real
- mymap sqr cube [(1,2.0),(2,3.0),(3,4.0),(4,5.0)];
我不知道如何使用第一个函数映射,我需要第二个函数 mymap 的提示
你可以试试:
fun mymap f g l =
let
fun f1 f (h,h1) = (f(h),h1)
fun g1 g (h,h1) = (h,g(h1))
in
map (g1 g) (map (f1 f) l)
end
我们定义了两个以元组为参数的函数 f1、g1,这样我们就可以将 map 与 f1 和元组列表一起用于 g1。
示例:
- mymap sqr sqr [(4,9),(4,16),(9,4)];
val it = [(16,81),(16,256),(81,16)] : (int * int) list