2013-02-13 18 views
5

不完全リストを差分リストに変換したいのですが、その逆もあります。差分リストに不完全

これが差に定期的にリストを変換するためのコードです:

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

は、どのように私は他の方向に行くのですか?

+0

としてそれを使用しますか?私には偽りのようだ。 – CapelliC

+1

''不完全リスト '' ** [1,2,3 | _] 'のような**部分リスト**を意味すると仮定すると、違いリストが部分リストを明白に表現する方法はありません。違いのリストは直接的な用語ではないので、データ構造ではなく、むしろ特定のケースでのみ有効な規約です。 – false

+0

あなたは最初に不完全な*リストをDLに変換すると述べています。次に、* regular *リストをDLに変換することについて話します。どちらですか?私は不完全であなたが '[1,2、.... |のようなインスタンス化されていない尾を持つリストを意味すると仮定します。 X]、var(X) 'である。 –

答えて

1

差分リストに不完全:

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

は、あなたがそのコードを見つけた

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