2017-10-07 70 views
1

SML函数图采用函数和列表,并将函数应用于列表元素。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中

回答

1

你可以尝试:

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