2013-02-13 41 views
5

Tôi muốn chuyển đổi danh sách không đầy đủ thành danh sách khác biệt và ngược lại.Chưa đầy đủ các danh sách khác nhau

Đây là mã để chuyển đổi danh sách thường xuyên để khác biệt:

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

Làm thế nào để tôi đi theo một hướng khác?

+0

Nơi mà bạn đã tìm thấy mã đó? Có vẻ giả với tôi. – CapelliC

+1

Giả sử bạn có nghĩa là "danh sách không đầy đủ" một danh sách ** một phần ** như '[1,2,3 | _]', không có cách nào một danh sách khác biệt có thể đại diện cho một phần danh sách một cách rõ ràng. Xin vui lòng không phải là một danh sách khác biệt không phải là một thuật ngữ trực tiếp vì vậy nó không phải là một cấu trúc dữ liệu mà là một quy ước chỉ hoạt động cho một số trường hợp nhất định. – false

+0

bạn lần đầu tiên nói rằng bạn chuyển đổi danh sách * không đầy đủ * sang DL, sau đó bạn nói về việc chuyển đổi danh sách * thường xuyên sang DL. Đó là nó? Tôi giả định bởi không đầy đủ bạn có nghĩa là một danh sách với đuôi không instantiated, như '[1,2, .... | X], var (X) '. –

Trả lời

1

Incomplete vào danh sách chênh lệch:

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

Sử dụng nó như

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 
Các vấn đề liên quan