अस्वीकरण: यह Xonix 'समाधान है। अगर आपको यह पसंद है तो उसे ऊपर वोट करें। लेकिन जैसा कि यह पता चलने के लिए मुझे कुछ सिर-खरोंच लग रहा था, मैंने सोचा कि मैं अपनी टिप्पणियों की पेशकश भी कर सकता हूं ताकि अन्य लाभ उठा सकें।
सबसे पहले, यहाँ एक उचित खंड के रूप में अपने समाधान है:
criminal(K):-
member(K,[a,b,c,d]),
(K\=a -> A=1;A=0),
(K=d -> B=1;B=0),
(K=b -> C=1;C=0),
(K\=d -> D=1;D=0),
A+B+C+D=:=1.
और यह इस प्रकार है:
सबसे पहले, वह व्यक्तियों की सूची के माध्यम से चलाता है (लोअर केस रहना होगा, इसलिए वे चर नहीं हैं)। K
बदले में उनमें से प्रत्येक को तुरंत चालू किया जाता है।
K
के प्रत्येक संभावित मूल्य के साथ वह शेष खंड के माध्यम से चलता है। K
परिकल्पना के रूप में व्याख्या की जा सकती है जो आपराधिक है। अगली 4 लाइनें ए, बी, सी और डी के प्रत्येक चर को बाइंडिंग प्रदान कर रही हैं। आप उन्हें इस तरह पढ़ सकते हैं: धारणा के तहत a
आपराधिक नहीं है, अन्यथा सत्य नहीं है। धारणा के तहत d
आपराधिक है, बी सच है अन्यथा नहीं। Asf। यही है, ए, बी, चर ... एक विशिष्ट आपराधिक दिया, corrsponding व्यक्ति की सच्चाई पर कब्जा।
एक ज्ञात बाधा के रूप में यह तथ्य है कि उनमें से केवल एक सत्य है, उनके सत्य मूल्यों का योग होना चाहिए 1. बैकट्रैकिंग पर, प्रोलॉग के लिए अगली बाध्यकारी बनाता है, और फिर से इसके माध्यम से चलता है। बाधा बाहर निकलती है केवल a
आपराधिक है (और d
सत्य बता रहा है, अगर मुझे गलत नहीं है)। प्यारा।
मुझे लगता है कि सही मिला: एक एक अपराधी है, लेकिन तीन झूठे हैं ?! – ThomasH