Recursion 对列表中的所有元素求和,而不重复已计算的元素
我试图得到另一种语言(例如Java或JavaScript)中的双for循环的结果 所以我能想到的最接近的东西是这样的:Recursion 对列表中的所有元素求和,而不重复已计算的元素,recursion,erlang,list-comprehension,Recursion,Erlang,List Comprehension,我试图得到另一种语言(例如Java或JavaScript)中的双for循环的结果 所以我能想到的最接近的东西是这样的: 1> L = [1,2,3]. [1,2,3] 2> R = [X + Y || X <- L, Y <- L]. [2,3,4,3,4,5,4,5,6] 3> 提前感谢……TL;DR [X+Y || X <- L, Y <- L, Y > X]. 结果是: 7> c(sum2). {ok,sum2} 8> su
1> L = [1,2,3].
[1,2,3]
2> R = [X + Y || X <- L, Y <- L].
[2,3,4,3,4,5,4,5,6]
3>
提前感谢……TL;DR
[X+Y || X <- L, Y <- L, Y > X].
结果是:
7> c(sum2).
{ok,sum2}
8> sum2:start(3).
[3,4,5]
9> sum2:start(5).
[3,4,5,6,5,6,7,7,8,9]
如果您没有要求和的元素列表,而只有整数,那么实际上有一个更简单的解决方案:
-module(sum3).
-export([start/1]).
start(Max) -> do_sum(1, 2, Max, []).
do_sum(X, S, S, A) when X + 1 =:= S -> lists:reverse([X + S | A]);
do_sum(X, S, S, A) -> do_sum(X + 1, X + 2, S, [X + S | A]);
do_sum(X, Y, S, A) -> do_sum(X, Y + 1, S, [X + Y | A]).
或者更简单的解决方案,只需理解列表:
4> L = [1, 2, 3].
[1,2,3]
5> [X+Y || X <- L, Y <- L, Y > X].
[3,4,5]
6> f().
ok
7> L = [1,2,3,4,5].
[1,2,3,4,5]
8> [X+Y || X <- L, Y <- L, Y > X].
[3,4,5,6,5,6,7,7,8,9]
4>L=[1,2,3]。
[1,2,3]
5> [X+Y | | xf()。
好啊
7> L=[1,2,3,4,5]。
[1,2,3,4,5]
8> [X+Y | | X
-module(sum3).
-export([start/1]).
start(Max) -> do_sum(1, 2, Max, []).
do_sum(X, S, S, A) when X + 1 =:= S -> lists:reverse([X + S | A]);
do_sum(X, S, S, A) -> do_sum(X + 1, X + 2, S, [X + S | A]);
do_sum(X, Y, S, A) -> do_sum(X, Y + 1, S, [X + Y | A]).
4> L = [1, 2, 3].
[1,2,3]
5> [X+Y || X <- L, Y <- L, Y > X].
[3,4,5]
6> f().
ok
7> L = [1,2,3,4,5].
[1,2,3,4,5]
8> [X+Y || X <- L, Y <- L, Y > X].
[3,4,5,6,5,6,7,7,8,9]