2013-02-13 25 views
5

Chcę przekonwertować niekompletne listy na listy różnic i na odwrót.Niekompletne do list różnicowych

Jest to kod do konwersji regularnych listę różnicą:

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

Jak mogę pójść w innym kierunku?

+0

Gdzie znalazłaś ten kod? Wydaje mi się fałszywy. – CapelliC

+1

Zakładając, że masz na myśli "niepełną listę" ** częściową listę ** taką jak "[1,2,3 | _]", nie ma możliwości, aby lista różnic mogła jednoznacznie reprezentować częściową listę. Proszę zauważyć, że lista różnic nie jest terminem bezpośrednim, więc nie jest strukturą danych, ale raczej konwencją, która działa tylko w określonych przypadkach. – false

+0

Najpierw podajesz, że konwertujesz * niepełne * listy na DL, a następnie mówisz o konwersji * zwykłej * listy na DL. Który to jest? Zakładam, że przez niekompletność rozumiesz listę z nie utworzonym końcem, np. '[1,2, .... | X], var (X) '. –

Odpowiedz

1

Niekompletne do listy różnica:

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

używać go jako

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 
Powiązane problemy