Essayer de comprendre les tuples en F# ..

Processus de pensée actuel

let add tuples a b = 
let a = (_,_)
let b= (_,_)
(a+b)

Cela ne fonctionnera pas car "_" n'est pas valide pour ce cas, alors j'ai pensé à essayer

let add tuples a b =
let a = (c,d)
let b = (e,f)
fst a + fst b, snd a + snd b;;

Cela ne fonctionnera pas car c,d,e,&f ne sont pas des variables connues. En Java, j'initialiserais traditionnellement cette variable pour qu'elle puisse être utilisée, mais en F#, cela semble un peu génial let a= int je ne sais même pas si cela fonctionnerait de toute façon

Toute aide pour essayer de corriger mon processus de pensée serait appréciée. Merci

Éditer:

Résultat attendu

A (1,3) b (2,4) retour (3,7)

2
huffola 15 sept. 2020 à 22:10

1 réponse

Meilleure réponse

Il existe deux manières d'accéder aux éléments d'un tuple et votre code semble les confondre. Tout d'abord, vous pouvez utiliser fst et snd sur des tuples à deux éléments. Vous avez en fait ce droit, mais vous devez supprimer d'autres lignes inutiles - a et b sont des tuples, vous pouvez donc simplement écrire :

let add a b =
  fst a + fst b, snd a + snd b

L'autre option consiste à utiliser la correspondance de modèle. Pour ce faire, vous devez attribuer une valeur de tuple, c'est-à-dire a ou b à un modèle qui définit de nouvelles variables comme (c, d). Faire ce qui précède en utilisant la correspondance de modèle ressemble à ceci :

let add a b =
  let (a1, a2) = a
  let (b1, b2) = b
  a1 + b1, a2 + b2

Les modèles peuvent apparaître dans des liaisons let autonomes comme ci-dessus, mais vous pouvez également les utiliser directement dans les arguments d'une fonction - vous pouvez donc raccourcir ceci à :

let add (a1, a2) (b1, b2) = 
  a1 + b1, a2 + b2
9
Tomas Petricek 15 sept. 2020 à 19:37