prolog difference-lists

prolog - Incompleto a listas de diferencias



difference-lists (2)

Quiero convertir listas incompletas en listas de diferencias y viceversa.

Este es el código para convertir la lista regular a la diferencia:

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

¿Cómo voy en la otra dirección?


Incompleto a la lista de diferencias:

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

Úselo como

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 = [].


| ?- 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