2016-03-28 23 views
3

Bu soru, Prolog’daki özel etiketlemede bulunan bir başka I posted earlier numarasının peşindedir."Contracting/1" yüklemesi yüklemi tutarsız değerleri sildi mi?

contracting/1, bir özel etiketleme yükleminde bir değişkene bir değer atamasından sonra kullanıldığında, "tutarsız" değerleri kalıcı olarak etki alanından silebilir mi? Ya da geri döndüğünde bu değerler geri yüklendi mi?

+0

, tutarsız değerleri geri gerek yoktur. Fakat 'sözleşme/1', alanın temsil edilmesini o kadar çok kullanabiliyorsa, o kadar da kullanılamaz. Ya da alan temsili, daha sonra daha maliyetli bir araştırmaya yol açar. – false

cevap

3

Bu değerler geri yüklemesinde geri yüklenmiştir.

Onlar devlet her tamamen geriye üzerinde çözülmüş olduğu gibi CLP (FD) kısıtlamaları olarak saf Prolog yüklemler, doğasıdır. Bu olmadan, pek çok önemli bildirim özellikleri tutamazdı. Daha fazla bilgi için bkz. .

Örneğin bir örnek oturumu kullanarak, clpfd:contracting/1 için bu da tutan kolayca görebilirsiniz:

tamamen bildirim açısından bakıldığında
 
?- X in 0..5, X mod Y #= 2, Y in 0..2. 
X in 0..5, 
X mod Y#=2, 
Y in 1..2. 

?- X in 0..5, X mod Y #= 2, Y in 0..2, clpfd:contracting([X,Y]). 
false. 

?- X in 0..5, X mod Y #= 2, Y in 0..2, (clpfd:contracting([X,Y]) ; true). 
X in 0..5, 
X mod Y#=2, 
Y in 1..2. 
+1

teşekkürler, mantıklı bir saflığa bakacağım :) – Manfred