2012-10-02 59 views
0

因此,我有列表[[],[1],[2,3]]的列表,我想將它合併到一個列表中。GNU prolog如何獲得列表成單列表

這是我試過到目前爲止我GNU序言:

function([],[]). 
function([Varlist|Vars],Var):- 
    function(Varlist,Var1), 
    function(Vars,Var2), 
    append(Var1,Var2,Var). 

,但是當我拿到1號出來,一直在努力現在小時失敗。

希望你能幫助:)

回答

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,我們只是改乘「平出」瓦爾(剩餘列出的清單)

function2([], []). 
function2([Varlist|Vars], Var) :- 
    function2(Vars, VarTemp1), 
    append(Varlist, VarTemp1, Var). 

事實上所以我們解決這個問題:

?- function2([[],[1],[2,3]], R). 
R = [1, 2, 3]. 

,但有一個bug,不容易被發現。事實證明,解決它也可以使程序更有效率。看看你是否能找到bug 解決它...

+0

找到了一個更簡單的方法。不知道它是否一般,但對我有用: intoList([],[])。 intoList([L | Ls],Vars): - append(L,L2,Vars),f(Ls,L2)。 –