2013-02-13 1 views
5

Ich möchte unvollständige Listen in Differenzlisten umwandeln und umgekehrt.Unvollständige Differenzenlisten

Dieser Code ist eine regelmäßige Liste Unterschied zu konvertieren:

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

Wie kann ich die andere Richtung gehen?

+0

Wo hast du diesen Code? Scheint mir falsch. – CapelliC

+1

Angenommen, Sie meinen mit "unvollständige Liste" eine ** Teilliste ** wie '[1,2,3 | _]', dann gibt es keine Möglichkeit, dass eine Differenzliste eine Teilliste eindeutig darstellt. Bitte beachten Sie, dass eine Differenzenliste kein direkter Begriff ist. Es handelt sich also nicht um eine Datenstruktur, sondern um eine Konvention, die nur für bestimmte Fälle geeignet ist. – false

+0

Sie zuerst feststellen, dass Sie * unvollständige * Listen zu DLs konvertieren, dann sprechen Sie über die Umwandlung * reguläre * Liste in DL. Welches ist es? Ich nehme an, mit unvollständig meinen Sie eine Liste mit nicht-instantiiertem Schwanz, wie '[1,2, .... | X], var (X) '. –

Antwort

1

unvollständig Differenzliste:

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

Verwenden Sie es als

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