Friday 15 February 2013

How to implement a particular division operator in Prolog? -


डिवीजन ऑपरेटर को इस तरह लागू करें कि: A 12 div 6 div 2 परिणाम है: ए = 4

इसलिए मुझे लगता है कि मुझे एक infix ऑपरेटर इस प्रकार से संबंधित बनाना होगा: yfx क्योंकि यह ऑपरेटर को पहले 6 डिवी 2 की गणना करने के लिए और फिर 12 डिव परिणाम (6 डिवि 2) की गणना करता है

मुझे उम्मीद है कि मेरी व्याख्या में स्पष्ट होना चाहिए ... मुझे पता है कि मैंने एक प्रक्रियागत तरीके से अवधारणा को समझाया है, लेकिन मुझे नहीं पता था कि तर्क के आधार पर परिचालन की प्राथमिकता कैसे व्यक्त की जाएगी ...

ठीक है, इसलिए मुझे लगता है (मुझे उम्मीद है) कि yfx ऑपरेटर सही है ...

समस्या यह है कि अब मुझे नहीं पता कि इस ऑपरेटर का वर्णन कैसे किया जाए।

पिछले अभ्यास में मैंने ऑपरेटर को इस तरह परिभाषित किया है:

  op (600, xfx, है)। / * Perter के पास सूचना है / / है (पीटर, सूचना)   

जैसा कि मैंने इवान ब्रैटको पुस्तक में पढ़ा है:

ऑपरेटर परिभाषाएं किसी भी ऑपरेशन या क्रिया को निर्दिष्ट नहीं करतीं सिद्धांत में, कोई ऑपरेशन या डेटा ऑपरेटर से जुड़ा नहीं है।

इसलिए मुझे लगता है कि मैं एक ऑपरेटर को परिभाषित नहीं कर सकता जो गणना करता है।

इसलिए मुझे लगता है कि मेरे अभ्यास का समाधान कुछ ऐसा हो सकता है:

  op (600, yfx, div)। डिवि (एक्स डिवि वाई, प्रभाग): - डिवीजन एक्स / वाई है   

लेकिन अच्छी तरह से काम नहीं करते हैं और इसके अलावा मुझे लगता है कि यह ऐसा नहीं है कि वे मुझे लागू करने के लिए कह रहे हैं।

div पूर्ववर्ती ऑपरेटर प्रतीत होता है, जो पहले से पूर्णांक विभाजन कर रहा है, फिर इसके सहयोगीता को बदलने के लिए पर्याप्त है।

यहां यह डिफ़ॉल्ट है:

 ? - वर्तमान_ोप (पी, ए, डिव)। पी = 400, ए = yfx   

बर्ताव

 ? - ए है 12 div 6 div 2 a = 1.   

आप के रूप में परिवर्तन जैसे:

 ? - [उपयोगकर्ता] |:: -op (400, एक्सफ़ी, डिव) |:% उपयोगकर्ता: // 1 संकलित 0,04 सेकंड, 1 खंड सच है   

और आपको मिल जाएगा

 ? - ए है 12 div 6 div 2. a = 4.   

सावधान रहें कि पूर्वनिर्धारित ऑपरेटरों को बदलना यह खराब अभ्यास है लेकिन मुझे कहना चाहिए कि मुझे पता नहीं है कि ऑपरेटरों को / 2 के मूल्यांकन में जोड़ने का कोई मानक तरीका है ....

संपादित करें SWI-Prolog अंकगणितीय जोड़ने के लिए: आप

  प्राप्त करें - एक्स 12 है mydiv 6 mydiv 2. एक्स = 4.   

के बाद

 : - सेशन (400, xfy, mydiv)। : - एरिथमेटिक_फंक्शन (माइडिव / 2) मैडिव (ए, बी, सी): - सी एक बी बी है।    

No comments:

Post a Comment