2013-02-13 53 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