में निम्न कोड पर विचार करें:काटें और असफल Prolog
a(X) :- b(X),!,c(X),fail.
a(X) :- d(X).
b(1).
b(4).
c(1).
c(3).
d(4).
क्वेरी a(X).
पैदा करता
1 ?- a(X).
false.
2 ?-
लेकिन में इस कोड
a(X) :- b(X),!,c(X).
a(X) :- d(X).
b(1).
b(4).
c(1).
c(3).
d(4).
क्वेरी के साथ a(X).
परिणाम:
1 ?- a(X).
X = 1.
तो मेरा सवाल है, fail/1
क्यों झूठा पैदा करता है? यह बैकट्रैकिंग को मजबूर करना है, है ना? तो b(1)
और c(1).
चेक किया जाएगा, मुझे लगता है, तो यह क्यों विफल हो जाता है?
लेकिन 'कट/1' केवल' एक्स = 1' चेक करता है, है ना? तो यह 'बी (1)' और 'सी (1)' दोनों की जांच करेगा। क्या मै गलत हु ? – ron
कटौती यह एक बुरा विषय है। देखें कि क्या आप [दस्तावेज़ीकरण] का पालन कर सकते हैं (http://www.swi-prolog.org/pldoc/doc_for?object=!/0) – CapelliC