मैं प्रोलॉग-कोरआउटिंग प्रेडिकेट्स के साथ चारों ओर खेल रहा था freeze/2
और frozen/2
:
?- freeze(X,a=a), frozen(X,Goal).
?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal).
sicstus-prolog (x86_64 के लिए संस्करण 4.5.1) ने ये उत्तर दिए:
| ? - फ्रीज (एक्स, ए = ए), जमे हुए (एक्स, गोल)। लक्ष्य = प्रोलॉग: फ्रीज (एक्स, उपयोगकर्ता: (ए = ए)) , प्रोलॉग: फ्रीज (एक्स, उपयोगकर्ता: (ए = ए))? ; नहीं | ? - फ्रीज (एक्स, ए = ए), फ्रीज (वाई, बी = बी), एक्स = वाई, फ्रोजन (एक्स, गोले)। Y = X, लक्ष्य = (उपयोगकर्ता: (ए = ए), प्रस्तावना: फ्रीज (एक्स, उपयोगकर्ता: (बी = बी)) , prolog: फ्रीज (एक्स, उपयोगकर्ता: (क एक =)), प्रोलॉग: फ्रीज (एक्स, उपयोगकर्ता: (बी = बी))? ; नहीं
अब मुझे उम्मीद नहीं थी!Goal = prolog:freeze(X,user:(a=a))
मुझे क्या उम्मीद थी कि जैसे जवाब थे, जैसे कि swi-prolog संस्करण 8.0.3 द्वारा दिया गया है :
? - फ्रीज (एक्स, ए = ए), जमे हुए (एक्स, गोल)। लक्ष्य = उपयोगकर्ता: (ए = ए) , फ्रीज (एक्स, ए = ए)। ? - फ्रीज (एक्स, ए = ए), फ्रीज (वाई, बी = बी), एक्स = वाई, फ्रोजन (एक्स, गोले)। एक्स = वाई, लक्ष्य = (उपयोगकर्ता: (ए = ए), उपयोगकर्ता: (बी = बी)) , फ्रीज (Y, a = a), फ्रीज (वाई, बी = बी)।
संभवतः, SICStus उत्तर और SWI उत्तर दोनों सही हैं ...
लेकिन क्या SICStus द्वारा दिए गए कुछ अजीबोगरीब जवाब (ओं) का गहरा कारण है?