2016-11-08 109 views
0

假設我想要構造一個包含10個元素的列表,其中每個元素可以是0或1或2.我所擁有的是兩個List1和List2,它們是那些1和2的位置。那麼,如何構造如何在Prolog中構造一個列表?

construct(List1,List2,L). 

例如::

輸入:

construct([1,3,5],[8],L) 

輸出:

L = [1,0,1,0,1,0,0,2,0,0] 
使用這樣的功能整個列表
+0

其實我已經實現了一個函數replace(L,pos,num,Lnew)來替換L中的pos-th元素並將新列表放入Lnew中,但我不知道如何使用這個函數實現構造函數。 – Jasmine233

+0

你真的需要在你的問題中顯示你所擁有的一切。 – 2016-11-08 14:17:29

回答

0

什麼

constructH(Top, Top, _, _, []). 

constructH(Num, Top, L1, L2, [1 | Ho]) :- 
    Num < Top, 
    member(Num, L1), 
    Np1 is Num+1, 
    constructH(Np1, Top, L1, L2, Ho). 

constructH(Num, Top, L1, L2, [2 | Ho]) :- 
    Num < Top, 
    member(Num, L2), 
    Np1 is Num+1, 
    constructH(Np1, Top, L1, L2, Ho). 

constructH(Num, Top, L1, L2, [0 | Ho]) :- 
    Num < Top, 
    \+ member(Num, L1), 
    \+ member(Num, L2), 
    Np1 is Num+1, 
    constructH(Np1, Top, L1, L2, Ho). 


construct(List1, List2, Lout) :- 
    constructH(1, 11, List1, List2, Lout). 

+0

對於最一般的查詢,答案看起來很奇怪:'? - 構造(As,Bs,Os).' – mat