2013-02-13 51 views
5

我想將不完整列表轉換爲差異列表,反之亦然。差異列表不完整

這是代碼定期列表轉換爲差異:

reg2diff(L,X-Y):-append(L,Y,X). 

我該如何去另一個方向?

+0

你在哪裏找到的代碼?對我來說似乎是假的。 – CapelliC 2013-02-13 20:13:07

+1

假設您的意思是「不完整列表」,像** [1,2,3 | _]這樣的**部分列表**,差異列表無法明確地表示部分列表。請不要指出差異列表不是一個直接的術語,因此它不是一個數據結構,而是一個僅適用於某些情況的約定。 – false 2013-02-14 14:17:59

+0

您首先聲明您將*不完整*列表轉換爲DL,然後您討論將* regular *列表轉換爲DL。這是什麼?我假設不完整,你的意思是一個帶有非實例化尾部的列表,比如'[1,2,.... | X],var(X)'。 – 2013-02-15 12:37:47

回答

1

殘缺差異列表:

inc2diff(L,Z):- 
    ( nonvar(L) 
    -> (L=[_|T] -> inc2diff(T,Z) ; L=[] -> Z=[]) 
    ; L=Z 
). 

使用它作爲

23 ?- L=[1,2,3|_],inc2diff(L,X). 
L = [1, 2, 3|X]. 

24 ?- L=[1,2,3|Z],inc2diff(L,X). 
L = [1, 2, 3|X], 
Z = X. 

25 ?- L=[1,2,3],inc2diff(L,X). 
L = [1, 2, 3], 
X = []. 
-1
| ?- listing(dl_list),dl_list([a,b,c,d|X]-X,L). 

% file: ...util.pg 

dl_list(A - [], A). 

L = [a,b,c,d] 
X = [] 

yes