2017-02-02 1 views
0

Je suis nouveau à SML. J'écris une fonction qui accepte 2 int (x, y) et une liste de tuples (boîtes nommées) en entrée. La longueur de ma liste peut changer. Je veux trouver 2 tuples dans la liste dont les éléments dépendent de x et y. par exemple je veux vérifier s'il y a un tuple comme box1 = (x, y) et un autre tuple comme box2 = (x-2, y-3) et si les deux sont disponibles dans la liste alors leurs valeurs devraient être changées et retourné simultanément. Je sais comment trouver un tuple et changer sa valeur en utilisant List.map. mais qu'en est-il de la mise à jour de plusieurs tuples?SML - modification de la valeur de plusieurs tuples dans la liste

fun move(x,y,boxes:(int * int)list) = 
    if List.exists (fn s => s = (x,y)) boxes andalso 
     List.exists (fn p => p = (x-1,y-2)) boxes 
    then ... (then for example how to change their value to box1=(x-1,y-2) 
       and box2=(x-3,y-4) at the same time and update them in the list) 

Répondre

3
List.map (fn p => 
    if p = (x, y) then (x-1, y-2) 
    else if p = (x-2, y-3) then (x-3, y-4) 
    else p 
) boxes