Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List Prolog从列表列表中选择元素_List_Recursion_Prolog_Accumulator - Fatal编程技术网

List Prolog从列表列表中选择元素

List Prolog从列表列表中选择元素,list,recursion,prolog,accumulator,List,Recursion,Prolog,Accumulator,给定一个列表列表(例如,[[1],[1,2,3],[3,4]]),我希望创建子列表成员的所有可能排列,以便上述示例的预期结果如下所示: ?- get_elements([[1], [1,2,3], [3,4]], R). R = [[1,1,3],[1,1,4],[1,2,3],[1,2,4],[1,3,3],[1,3,4]] ? ; no 我所拥有的是: get_elements([], []). get_elements([[H|_]|Lists], [H|L]) :- get_e

给定一个列表列表(例如,
[[1],[1,2,3],[3,4]]
),我希望创建子列表成员的所有可能排列,以便上述示例的预期结果如下所示:

?- get_elements([[1], [1,2,3], [3,4]], R).
R = [[1,1,3],[1,1,4],[1,2,3],[1,2,4],[1,3,3],[1,3,4]] ? ;
no
我所拥有的是:

get_elements([], []).
get_elements([[H|_]|Lists], [H|L]) :-
    get_elements(Lists, L).
get_elements([[_,H|T]|Lists], L) :-
    get_elements([[H|T]|Lists], L).
这非常有效,但会逐个返回元素,因此输出如下:

?- get_elements([[1],[1,2,3],[3,4]], R).
R = [1,1,3] ? ; 
R = [1,1,4] ? ;
R = [1,2,3] ? ;
R = [1,2,4] ? ;
R = [1,3,3] ? ;
R = [1,3,4] ? ;
no

我想我应该添加另一个参数来累加元素,但就是看不清楚如何。任何帮助都将不胜感激。

只需使用
findall/3
收集所有输出:

get_elements/2
重命名为类似
get_elements1/2
的名称,并添加以下步骤:

get_elements(L, R):-
  findall(E, get_elements1(L, E), R).

只需使用
findall/3
收集所有输出:

get_elements/2
重命名为类似
get_elements1/2
的名称,并添加以下步骤:

get_elements(L, R):-
  findall(E, get_elements1(L, E), R).

感谢布局清理@repeat!感谢布局清理@repeat!