Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 对列表中的所有元素求和,而不重复已计算的元素_Recursion_Erlang_List Comprehension - Fatal编程技术网

Recursion 对列表中的所有元素求和,而不重复已计算的元素

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

我试图得到另一种语言(例如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> 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]