2009-04-20 16 views
6

मैं अगले दो तथ्यों मेरी prolog दुभाषिया में लोड किया है नियम:Prolog ऑपरेटर पूर्वता और मिलान

foo(U+V,1). 
foo(U*V,2). 

अब मैं उस के साथ अगले प्रश्नों कोशिश परिणाम:

foo(x*x+x,R). --> R = 1 
foo(x+x*x,R). --> R = 1 
foo(x*x*x,R). --> R = 2 

अब मैं के साथ की कोशिश अगली क्वेरी:

foo(x*x-x,R). --> no 

जैसा कि मैं समझता हूं, यह समझाया गया है कि ऑपरेटर की प्राथमिकता कैसे वृक्ष अभिव्यक्ति का निर्माण करती है :

x+x*x --> +   so it matches with --> + 
     /\        /\ 
      x *        U V 
      /\ 
      x x 

x-x*x --> -   DOES NOT matches any fact. 
     /\        
      x *         
      /\ 
      x x 

क्या यह स्पष्टीकरण सही है?

उत्तर

4

हां, यह सही है।

डिफ़ॉल्ट ऑपरेटर प्राथमिकता को प्राकृतिक माना जाता है, यानी सामान्य गणितीय प्राथमिकता का उपयोग करें। लेकिन अगर आपको यह पसंद नहीं है तो आप इसे फिर से परिभाषित कर सकते हैं।

चाहे प्राथमिकता बदलना एक अच्छा विचार है, यह प्रभावी रूप से प्रोलॉग के सिंटैक्स को बदलता है और पार्सिंग समस्याओं का कारण बन सकता है। विशेष रूप से यदि आप 1000 से ऊपर की प्राथमिकता के साथ प्रोलॉग वाक्यविन्यास के लिए ऑपरेटरों की प्राथमिकता बदलते हैं।

संबंधित मुद्दे