在元组 Erlang 中添加单个元素
Adding individual elements within a tuple Erlang
我想知道如何在元组中添加单个元素。
例如如果我有两个元组:
A={1,2,3} and B={4,5,6}
我想要的结果是将每个元组的相应元素相加(1+4,2+5,3+6) 所以我得到的输出是
A+B={5,7,9}
假设两个元组具有相同的大小,最简单的方法是将元组变成列表,遍历它们然后再次创建一个元组,如:
list_to_tuple([Ai + Bi || {Ai, Bi} <- lists:zip(tuple_to_list(A), tuple_to_list(B))]).
或者,如果您想遍历元组:
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]).
其中一种方式是:
> {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}
这利用了元组应该是有限的这一事实
我们可以使用模式匹配将这个逻辑封装在一个简单的函数中:
sum_tuples({A, B, C}, {X, Y, Z}) -> {A + X, B + Y, C + Z}.
我想知道如何在元组中添加单个元素。 例如如果我有两个元组:
A={1,2,3} and B={4,5,6}
我想要的结果是将每个元组的相应元素相加(1+4,2+5,3+6) 所以我得到的输出是
A+B={5,7,9}
假设两个元组具有相同的大小,最简单的方法是将元组变成列表,遍历它们然后再次创建一个元组,如:
list_to_tuple([Ai + Bi || {Ai, Bi} <- lists:zip(tuple_to_list(A), tuple_to_list(B))]).
或者,如果您想遍历元组:
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]).
其中一种方式是:
> {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}
这利用了元组应该是有限的这一事实
我们可以使用模式匹配将这个逻辑封装在一个简单的函数中:
sum_tuples({A, B, C}, {X, Y, Z}) -> {A + X, B + Y, C + Z}.