मेरे पास प्रोलॉग में एक अनुमानित, अद्वितीय_लेमेंट/2 के दो, थोड़ा अलग, कार्यान्वयन हैं। तत्व एक्स और एक सूची एल दिए जाने पर पूर्वानुमान सफल होता है, तत्व एक्स सूची में केवल एक बार दिखाई देता है।(एसडब्ल्यूआई) प्रस्ताव: उप-लक्ष्यों का आदेश
कार्यान्वयन 1:
%%% unique_element/2
unique_element(Elem, [Elem|T]) :-
not(member(Elem, T)).
unique_element(Elem, [H|T]) :-
member(Elem, T),
H\==Elem,
unique_element(Elem, T),
!.
परिणाम:
?- unique_element(X, [a, a, b, c, c, b]).
false.
?- unique_element(X, [a, b, c, c, b, d]).
X = a ;
X = d.
कार्यान्वयन 2:
%%% unique_element/2
unique_element(Elem, [Elem|T]) :-
not(member(Elem, T)).
unique_element(Elem, [H|T]) :-
H\==Elem,
member(Elem, T),
unique_element(Elem, T),
!.
मामले में आप पहली बार में नोटिस नहीं किया था नीचे कार्यान्वयन और परिणाम हैं दृष्टि: "एच \ == एलेम" और "सदस्य (एलेम, टी)" दूसरे प्रत्यारोपण, नियम 2 पर फिसल गए हैं।
परिणाम:
?- unique_element(X, [a, a, b, c, c, b]).
X = a.
?- unique_element(X, [a, b, c, c, b, d]).
X = a ;
X = d.
प्रश्न: कैसे आदेश, इस मामले में, परिणाम प्रभावित करता है? मुझे एहसास है कि नियम/तथ्यों/आदि मामलों का आदेश। यद्यपि फ़्लिप किए गए दो विशिष्ट नियम, "कनेक्ट" नहीं होते हैं या किसी अन्य को किसी भी तरह प्रभावित नहीं करते हैं (उदाहरण के लिए गलत जगह/ऑर्डर में "कट" अनुमानित)।
नोट: हम यहां एसडब्ल्यूआई-प्रोलॉग के बारे में बात कर रहे हैं।
नोट 2: मुझे पता है, शायद अलग और बेहतर कार्यान्वयन। मेरा प्रश्न यहां उप-लक्ष्यों को बदलने के क्रम के बारे में है।
दोनों संस्करण गलत 'अनन्य_लेमेंट (एक्स, [ए, बी, सी]), एक्स = सी। – false