差异列表不完整

Cor*_*cai 5 prolog difference-lists

我想将不完整的列表转换为差异列表,反之亦然.

这是将常规列表转换为差异的代码:

reg2diff(L,X-Y):-append(L,Y,X).
Run Code Online (Sandbox Code Playgroud)

我该怎么走另一个方向?

Wil*_*ess 1

差异列表不完整:

inc2diff(L,Z):- 
  (  nonvar(L) 
  -> ( L=[_|T] -> inc2diff(T,Z) ; L=[] -> Z=[] )
  ;  L=Z
  ).
Run Code Online (Sandbox Code Playgroud)

使用它作为

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 = [].
Run Code Online (Sandbox Code Playgroud)