प्रोलॉग में कुछ अनुभव के साथ कोई भी प्रोग्रामर संख्याओं के लिए असामान्य नोटेशन का उपयोग करने के फायदे जानता है। उदाहरण, अगर हम 1 की सूची के रूप में एक संख्या का प्रतिनिधित्व करते हैं "(" 4 "सूची है" [1,1,1,1] "और इतने पर), हम परिभाषित कर सकते हैं:प्रोलॉग: गायब सुविधा?
unary_succ(X,[1|X]).
निम्नलिखित प्रश्नों करता है क्या उम्मीद है:
?- X=[1,1],unary_succ(X,Y).
X = [1, 1],
Y = [1, 1, 1].
?- unary_succ(X,Y),X=[1,1].
X = [1, 1],
Y = [1, 1, 1].
?- unary_succ(X,Y),Y=[1,1].
X = [1],
Y = [1, 1].
इस तरह, बयान unary_succ (एक्स, वाई) एक्स और वाई "बांधता है" एक तरह से है कि, अगर बाद तथ्य कहा गया है, इन में से एक चर एक मूल्य के लिए बाध्य है, दूसरा एक करता है।
हालांकि, यदि हम आंतरिक संख्या का प्रतिनिधित्व करते हैं तो यह व्यवहार संभव नहीं है:
?- X=2,succ(X,Y).
X = 2,
Y = 3.
?- succ(X,Y),X=2.
ERROR: succ/2: Arguments are not sufficiently instantiated
?- succ(X,Y),Y=2.
ERROR: succ/2: Arguments are not sufficiently instantiated
मेरी राय में, यह बहुत उपयोगी होगा कि पिछले बयान और इसी तरह की अपेक्षा की जाती है। यही है, हमें दो चरों को इस तरह से जोड़ने की जरूरत है कि, जब उनमें से एक मूल्य के लिए बाध्य है, तो दूसरा पहले स्थापित नियम का पालन करता है।
मेरे प्रश्न हैं:
क) कुछ आसान करने के लिए कि Prolog में जिस तरह से।
बी) यदि संभव नहीं है, तो इस सुविधा का समर्थन करने वाली कोई अन्य प्रोग्रामिंग भाषा?
कोई टिप्पणी स्वागत है।
सभी को धन्यवाद।
* परिशिष्ट मैं *
एक और उदाहरण है:
user_id(john,1234).
user_id(tom,5678).
और प्रश्नों:
X=john,user_id(X,Y).
user_id(X,Y),X=john
वर्तमान में उलटे पांव लौटने द्वारा हल कर रहे हैं।
एसडब्ल्यूआई प्रोलॉग में, मुझे लगता है कि आप clpfd लाइब्रेरी के साथ कर सकते हैं। आप यह देखने के लिए अपने स्रोत कोड को देखना चाहेंगे कि इसे कैसे कार्यान्वित किया जाता है। – nhahtdh
हाय। आपके सहयोग के लिए धन्यवाद। प्रश्न में जोड़ा गया स्पष्ट करने के लिए एक और उदाहरण। –
मैं @nhahtdh द्वारा सीएलपी (एफडी) सुझाव दूसरा सेकेंड करता हूं: कम से कम पूर्णांक के लिए, सीएलपी (एफडी) बाधाओं का उपयोग करके निश्चित रूप से एक रिलेशनल समाधान है जिसे आप ढूंढ रहे हैं, और सभी प्रमुख प्रोलॉग कार्यान्वयन द्वारा प्रदान किया जाता है। बस 'एक्स # = 2, वाई # = एक्स + 1' या समकक्ष' वाई # = एक्स + 1, एक्स # = 2' लिखें। – mat