एक ही लंबाई की दो सूचियों के बीच आलोचनात्मक दूरी की गणना करने के लिए पर निर्भर है, मैं hamm/4
की इस परिभाषा के साथ foldl(hamm, A, B, 0, R).
का उपयोग करें:शासन आदेश
hamm(A, A, V, V) :- !.
hamm(A, B, V0, V1) :- A \= B, V1 is V0 + 1.
पहला नियम में कटौती अनावश्यक बैक ट्रैकिंग से बचाता है। दूसरा नियम है, तथापि, अलग ढंग से लिखा गया हो सकता:
hamm2(A, A, V, V) :- !.
hamm2(_, _, V0, V1) :- V1 is V0 + 1.
और hamm2/4
अभी भी foldl/5
साथ या प्रश्नों जहां दोनों ए और बी का आधार हैं, के लिए एक साथ सही हो जाएगा।
तो क्या एक दूसरे को पसंद करने का वास्तव में एक अच्छा कारण है? या क्या नियमों को उस क्रम में रखने या उन्हें चारों ओर बदलने का कोई कारण है?
मुझे पता है कि क्वेरी
hamm(a, B, 0, 1).
गलत है, जबकि
hamm2(a, B, 0, 1).
सही है, लेकिन मैं काफी तय नहीं कर सकता जो एक और समझ में आता है। । ।
आप तर्क दे सकता है, 'hamm2 के लिए (ए, बी, 0, 1)', हाँ, बी नहीं है ए के समान, इसलिए इन दो तत्वों को हथौड़ा दूरी में जोड़ना चाहिए ... लेकिन जैसा कि मैंने कहा, मैं यह भी तय नहीं कर सकता कि यह कब समझ में आएगा। –