यह शायद एक समारोह की सबसे छोटी कार्यान्वयन कि PrologProlog और उलटे पांव लौटने
में Prolog के बारे मेंcount([], 0).
count([_|B], T) :- count(B, U), T is U + 1.
एक बात यह है कि मैं अभी भी चारों ओर मेरे सिर लपेटो नहीं कर सकते हैं एक सूची की लंबाई देता है की सीमाओं का लचीलापन है पैरामीटर के रूप में चर का उपयोग कर।
तो उदाहरण के लिए मैं count([a, b, c], 3).
चला सकता हूं और true
प्राप्त कर सकता हूं। मैं count([a, b], X).
भी चला सकता हूं और X = 2.
का उत्तर प्राप्त कर सकता हूं। विचित्र रूप से (कम से कम मेरे लिए) यह है कि मैं count(X, 3).
भी चला सकता हूं और कम से कम एक परिणाम प्राप्त कर सकता हूं, जो कि X = [_G4337877, _G4337880, _G4337883] ;
जैसा कुछ दिखता है, इससे पहले कि दुभाषिया एक अनंत लूप में गायब हो जाए। मैं count(X, A).
जैसे कुछ "लचीला" भी चला सकता हूं और X = [], A = 0 ; X = [_G4369400], A = 1.
प्राप्त कर सकता हूं, जो स्पष्ट रूप से अपूर्ण है लेकिन किसी भी तरह वास्तव में अच्छा है।
इसलिए मेरा बहुआयामी प्रश्न। क्या मैं किसी भी तरह प्रोलॉग को समझा सकता हूं कि count(X, 3).
निष्पादित करते समय पहले परिणाम से परे न दिखें? क्या मैं किसी भी तरह Prolog को count(X, A).
के लिए किसी भी समाधान का समाधान कर सकता हूं? क्या कोई सीमा है कि मैं किस प्रकार के समाधान उत्पन्न कर सकता हूं? इस विशिष्ट भविष्यवाणी के बारे में क्या है, जो मुझे सभी संभावित प्रकार के प्रश्नों के लिए सभी समाधान उत्पन्न करने से रोकता है?
ओह हाँ, मुझे मूर्खतापूर्ण। – vasily
@ vasily: क्या यह वास्तव में वह जवाब है जिसे आप चाहते थे? – false
@false बिल्कुल नहीं। यह स्पष्ट रूप से कटाक्ष था, क्योंकि लंबाई की लाइब्रेरी कार्यान्वयन कोड की केवल 2 पंक्तियों की तुलना में अधिक लंबा है। – vasily