2015-06-17 3 views
13

बड़े पाठ्यपुस्तकों एक में अक्सर निम्नलिखित की तरह ऑपरेटर घोषणाओं का सामना करना पड़ता:उच्च प्राथमिकता वाले ऑपरेटरों परमाणुओं के लिए राउंड ब्रैकेट की आवश्यकता क्यों नहीं है?

?- op(1200,fx,(:-)). 
      ^^ 

ये दौर इस्तेमाल किया कोष्ठक आवश्यक माना जाता है। लेकिन आज, अब उनकी आवश्यकता नहीं है:

| ?- writeq(op(1200,fx,(:-))).  
op(1200,fx,:-) 

उन्हें अब क्यों आवश्यकता नहीं है? मानक इस स्थिति से कैसे सामना करता है?


p.97 6. मानक ऑपरेटर एमयू-Prolog 3.2db संदर्भ मैनुअल की घोषणाओं, ली Naish, LNCS 238, स्प्रिंगर-वर्लग द्वारा 1985

उत्तर

6

op(1200,fx,:-) कार्यात्मक नोटेशन में एक चक्र शब्द है।

6.3.3 यौगिक शर्तों --- कार्यात्मक अंकन का हवाला देते हुए:

एक यौगिक अवधि कार्यात्मक अंकन में लिखित रूप f(A1,...,An) जहां प्रत्येक तर्क Ai एक आर्ग और वे द्वारा अलग किया जाता है , (अल्पविराम)।

term = atom, open ct, arg list, close;

arg list = arg;
arg list = arg, comma, arg list;

का हवाला देते हुए 6.3.3.1 तर्क:

एक तर्क (सिंटैक्स नियमों में आर्ग द्वारा प्रतिनिधित्व) तर्क के रूप में होती है एक यौगिक शब्द या eleme के एक सूची का एनटी। यह एक परमाणु जो एक ऑपरेटर है, या प्राथमिकता के साथ एक शब्द हो सकता है नहीं से अधिक 999.

arg = atom; अगर परमाणु एक ऑपरेटर (मनमाने ढंग से प्राथमिकता के साथ)
arg = term;

(प्राथमिकता 999 के साथ)

उपरोक्त हाइलाइट किए गए मामले arg = atom;, :- के कारण op(1200,fx,:-) में राउंड ब्रैकेट की आवश्यकता नहीं है।

अगर यह ऊपर विशेष मामले के लिए नहीं थे, हम , गोल कोष्ठक जरूरत व्युत्पत्ति 6.3.1 का पालन करना होगा के रूप में होगा।3 परमाणुओं:

प्राथमिकता 0 के साथ term = atom;, अगर परमाणु, एक ऑपरेटर
term = atom; प्राथमिकता 1201 के साथ नहीं है अगर परमाणु एक ऑपरेटर है।


6

Prolog में निषेध और नियंत्रण में प्रदर्शित होने निम्नलिखित सभी आईएसओ/आईईसी 13211-1: 1 99 5 को संदर्भित करते हैं।

ये दौर इस्तेमाल किया कोष्ठक आवश्यक हो: मेरे अंदर बाहर चलते हैं ...

6.5.1  graphic char  = ":"; 
      graphic char  = "-"; 

6.4.2  graphic token char = graphic char; 

      graphic token  = graphic token char, { graphic token char }; 

      name token   = graphic token; 

6.4  name    = [ layout text sequence (* 6.4.1 *) ], name token; 

6.3.1.3 atom    = name; 

6.5.3  open char   = "("; 
      close char   = ")"; 
      comma char   = ","; 

6.4.8  open token  = open char; 
      close token  = close char; 
      comma token  = comma char; 

6.4.1  (* grammar rules for layout text sequence were omitted *) 

6.4  comma    = comma token; 
      open ct   = open token; 
      close    = [ layout text sequence ], close token; 

6.3.3.1 arg    = atom; (* if that atom is an operator *) 
      arg    = term; (* otherwise: priority = 999 *) 

6.3.3  arg list   = arg; 
      arg list   = arg, comma, arg list; 

6.3.3  term    = atom, open ct, arg list, close ; 

तो हम प्रारंभिक सवाल पर वापस आते हैं। लेकिन आज, उन्हें अब जरूरत नहीं है। उन्हें अब क्यों जरूरी नहीं है? मानक इस स्थिति से कैसे सामना करता है?

मान लें कि T = op(1200,fx,:-) है।

  1. T कार्यात्मक अंकन में प्रदान की एक यौगिक शब्द है।

  2. T ऊपर शासन द्वारा कवर किया जाता term = atom, open ct, arg list, close;

  3. atom मैचों op, जो T की functor है।

  4. खुला सीटी एक खुले ब्रैकेट से मेल खाता है।

  5. "मध्य भाग" (T के तर्क) arg list के व्याकरण नियमों द्वारा कवर किया गया है।

  6. arg listarg की एक गैर-खाली सूची है।

  7. arg क्या है?

    • 1000 की तुलना में कम प्राथमिकता, की प्राथमिकता के साथ एक अवधि (',')/2। उदा।, 1200 और fx

    • एक परमाणु जो एक ऑपरेटर है। (कोई स्ट्रिंग संलग्न नहीं है!)

  8. निकटतम समापन ब्रैकेट से मेल खाता है।

का हवाला देते हुए:

एक तर्क (सिंटैक्स नियमों में arg के प्रतिनिधित्व वाले एक compount अवधि या एक सूची के तत्व के तर्क के रूप में होता है यह एक परमाणु जो एक ऑपरेटर है हो सकता है, या। प्राथमिकता वाला शब्द 99 9 से अधिक नहीं है। जब कोई तर्क मनमानी शब्द होता है, तो इसकी प्राथमिकता ',' (अल्पविराम) ऑपरेटर की प्राथमिकता से कम होगी ताकि अल्पविराम ऑपरेटर और अल्पविराम के रूप में अल्पविराम के बीच कोई संघर्ष न हो। तर्क या सूची तत्व विभाजक।

नोट:

एक "कथन" के इस अवधारणा सुनिश्चित करता है कि दोनों पदों f(x,y) और f(:-, ;, [:-, :-|:-]) वाक्य रचना वैध जो कुछ ऑपरेटर परिभाषाओं वर्तमान में परिभाषित कर रहे हैं। कॉमा एक परमाणु नहीं है और निम्नलिखित "शर्तों" में वाक्यविन्यास त्रुटियां हैं: f(,,a), [a,,|v], और [a,b|,]; लेकिन निम्नलिखित दो शब्द वाक्य रचनात्मक रूप से मान्य हैं: f(',',a), [a,','|v], और [a,b|',']

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

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