如果你考慮這一概括:
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,我們只是改乘「平出」瓦爾(剩餘列出的清單)
function2([], []).
function2([Varlist|Vars], Var) :-
function2(Vars, VarTemp1),
append(Varlist, VarTemp1, Var).
事實上所以我們解決這個問題:
?- function2([[],[1],[2,3]], R).
R = [1, 2, 3].
,但有一個bug,不容易被發現。事實證明,解決它也可以使程序更有效率。看看你是否能找到bug 和解決它...
找到了一個更簡單的方法。不知道它是否一般,但對我有用: intoList([],[])。 intoList([L | Ls],Vars): - append(L,L2,Vars),f(Ls,L2)。 –