2017-10-07 7 views
1

La fonction SML prend une fonction et une liste et applique la fonction aux éléments de la liste.Fonction SML et tuples

La carte de fonction, qui a le type suivant, est à la fois polymorphe et fonction d'ordre supérieur. Ecrivez une autre fonction mymap qui prend deux fonctions f et g et une liste de tuples 2-éléments.

Il s'applique f sur le premier élément des tuples et il s'applique g sur le deuxième élément des tuples.

Par exemple:

- 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)]; 

Je ne sais pas comment utiliser la première carte de fonction et j'ai besoin allusion pour la deuxième fonction mymap

Répondre

1

Vous pouvez essayer:

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 

Nous définissons deux fonctions f1, g1 qui ont un tuple comme argument pour que nous puissions utiliser map avec f1 et list of tuples et same pour g1.

Exemple:

- mymap sqr sqr [(4,9),(4,16),(9,4)]; 
val it = [(16,81),(16,256),(81,16)] : (int * int) list