2013-02-13 14 views
5

Voglio convertire le liste incomplete in liste di differenze e viceversa.Incompleto alle liste delle differenze

Questo è il codice per convertire lista regolare per differenza:

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

Come faccio ad andare nella direzione opposta?

+0

Dove hai trovato quel codice? Sembra falso per me. – CapelliC

+1

Supponendo che tu intenda per "lista incompleta" una ** lista parziale ** come '[1,2,3 | _]', non c'è modo che una lista di differenze possa rappresentare una lista parziale in modo non ambiguo. Per favore, non che una lista di differenze non è un termine diretto, quindi non è una struttura di dati, ma piuttosto una convenzione che funziona solo in determinati casi. – false

+0

per prima cosa dichiari di convertire * liste incomplete * in DLs, quindi parli di conversione * normale * lista in DL. Cos'è questo? Suppongo per incomplete intendi una lista con coda non istanziata, come '[1,2, .... | X], var (X) '. –

risposta

1

incompleta alla lista differenza:

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

usarlo come

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