0
votes

Ajouter des éléments individuels dans un tuple Erlang

Je veux savoir comment ajouter des éléments individuels dans un tuple. Par exemple, si j'ai deux tuples:

A+B={5,7,9}

Le résultat que je veux est d'ajouter les éléments correspondants de chaque tuple (1 + 4,2 + 5,3 + 6) pour que la sortie que j'obtienne soit

A={1,2,3} and B={4,5,6}


0 commentaires

3 Réponses :


0
votes

À condition que les deux tuples aient la même taille, le moyen le plus simple de le faire est de transformer les tuples en listes, de les parcourir, puis de créer à nouveau un tuple, comme:

sum_tuples(A, B) ->
    list_to_tuple(sum_tuples_iterate(A, B, 1, [])).

sum_tuples_iterate(A, _B, I, Acc) when I > tuple_size(A) ->
    lists:reverse(Acc);
sum_tuples_iterate(A, B, I, Acc) ->
    sum_tuples_iterate(A, B, I+1, [element(I, A) + element(I, B) | Acc]).

ou, si vous souhaitez parcourir les tuples:

list_to_tuple([Ai + Bi || {Ai, Bi} <- lists:zip(tuple_to_list(A), tuple_to_list(B))]).


0 commentaires

1
votes

L'un des moyens est:

> {X,Y,Z}={1,2,3}.
{1,2,3}
> {A,B,C}={5,6,7}.
{5,6,7}
> {X+A,Y+B,Z+C}.
{6,8,10}

Cela utilise le fait que les tuples doivent être finis


0 commentaires

0
votes

Nous pouvons encapsuler cette logique dans une fonction simple en utilisant la correspondance de modèles:

sum_tuples({A, B, C}, {X, Y, Z}) -> {A + X, B + Y, C + Z}.


0 commentaires