2017-02-02 2 views
0

Je suis nouveau à SML. J'écris une fonction qui accepte 2 int et une liste de tuples en entrée:SML - Trouver un élément dans la liste et changer sa valeur

fun moveBoxL(Xw,Yw,boxes:(int * int)list) = 

La longueur de ma liste (boîtes) peuvent changer. Je veux trouver un tuple dans la liste dont les éléments sont égaux à Xw, Yw. Par exemple je veux un tuple comme box1 dont les éléments sont comme ceci: box1 = (Xw, Yw) et s'il y avait un tel tuple, je veux changer sa valeur => box1 (Xw-1, Yw-1). Y a-t-il un moyen?

Répondre

1
fun moveBox (x, y, boxes) = List.map (fn p => if p = (x,y) then (x-1,y-1) else p) boxes 
+0

Merci. Est-il également possible de vérifier plusieurs conditions en utilisant List.map et de changer 2 de tuples? Par exemple pour trouver un tuple comme box1 dont la valeur est box1 = (Xw, Yw) et un tuple comme box2 = (Xw, Yw-1) et changer leur valeur par exemple à => box1 = (Xw + 1, Yw-1) & box2 = (Xw-1, Yw-1) simultanément? – helen

+0

Bien sûr, ajoutez simplement une condition 'else if'. –

+0

Mais je veux que les deux se produisent en même temps. Je veux dire: si List.exists (fn s => s = (X, Y)) les cases et aussi List.exists (fn p => p = (X, Y)) les cases alors .... (alors par exemple changer et return s = (X-1, Y-1) et aussi p = (X-2, Y-2) Je voulais savoir comment écrire cette condition en utilisant List.map pour changer leur valeur en même temps? – helen