所以我有一个列表[[],[1],[2,3]]列表,我希望将它合并到一个列表中。
这是我到目前为止尝试过的GNU Prolog:
function([],[]).
function([Varlist|Vars],Var):-
function(Varlist,Var1),
function(Vars,Var2),
append(Var1,Var2,Var).
但是当我得到数字1时,这就失败了,现在已经尝试了几个小时。
希望你能提供帮助:)
答案 0 :(得分:0)
如果你考虑这种概括:
function1(L, L).
function1([Varlist|Vars],Var) :-
function1(Varlist,Var1),
function1(Vars,Var2),
append(Var1,Var2,Var).
你会发现我们得到的不仅仅是要求:
?- function1([[],[1],[2,3]], R).
R = [[], [1], [2, 3]] ;
R = [[1], [2, 3]] ;
R = [1, [2, 3]] ;
R = [1, 2, 3] ;
false.
我们应该保留最后的解决方案。不那么容易......恢复原始代码:
function2([], []).
function2([Varlist|Vars],Var) :-
...
如果我们假设Varlist 是一个列表,那么我们将立即使用它作为参数来追加/ 3来获取Var,我们只是递归到“扁平化”Vars(其余列表列表)< / p>
function2([], []).
function2([Varlist|Vars], Var) :-
function2(Vars, VarTemp1),
append(Varlist, VarTemp1, Var).
确实,我们解决了这个问题:
?- function2([[],[1],[2,3]], R).
R = [1, 2, 3].
但有一个错误,不容易发现。事实证明,解决它也使程序更有效。看看你是否能找到和解决它的错误......