उपयोगकर्ता-परिभाषित इन्फिक्स ऑपरेटर


10

मुझे पता है कि जूलिया में ऑपरेटर केवल मानक कार्य हैं, और मैं उन्हें साधारण उपसर्ग कॉल सिंटैक्स का उपयोग करके उपयोग कर सकता हूं:

julia> +(1, 2)
3

हालांकि, वे इस अर्थ में भी विशेष हैं कि वे (और आमतौर पर) इन्फिक्स ऑपरेटरों के रूप में उपयोग किए जा सकते हैं:

julia> 1+2
3


क्या मैं अपने खुद के इन्फिक्स ऑपरेटर को परिभाषित कर सकता हूं? यदि हां, तो कैसे?

उदाहरण के लिए:

julia> α(x, y) = x+y
α (generic function with 1 method)

julia> α(1, 2)
3 # as expected

julia> 1α2
# expected result: 3
ERROR: UndefVarError: α2 not defined
Stacktrace:
 [1] top-level scope at REPL[5]:1

julia> 1 α 2
# expected result: 3
ERROR: syntax: extra token "α" after end of expression
Stacktrace:
 [1] top-level scope at REPL[5]:0

जवाबों:


14

जैसा कि आपने कहा, ऑपरेटर केवल मानक कार्य हैं, जिन्हें आप परिभाषित कर सकते हैं और अन्यथा किसी अन्य फ़ंक्शन की तरह हेरफेर कर सकते हैं। हालांकि, जूलिया के पार्सर को प्रतीक के एक निश्चित सेट को इन्फिक्स ऑपरेटरों के रूप में पहचानने के लिए कॉन्फ़िगर किया गया है; यदि आप एक फ़ंक्शन को परिभाषित करते हैं जिसका नाम इन प्रतीकों में से एक है, तो इसे एक इन्फिक्स ऑपरेटर के रूप में पार्स किया जाएगा।

उदाहरण के लिए:

julia> ⊕(x, y) = x+y
 (generic function with 1 method)

# standard prefix function call
julia> ⊕(1, 2)
3

# infix operator call
julia> 12
3

julia> 1  2
3


जूलिया पार्सर स्रोत कोड में इन्फिक्स ऑपरेटरों (और संबंधित पूर्वता) के रूप में मान्यता प्राप्त प्रतीकों की सूची पाई जा सकती है । अधिकांश भाग के लिए, यह सूची यूनिकोड श्रेणी Sm (प्रतीक, गणित) का सबसेट है ।

फिलहाल, इसमें उदाहरण के लिए शामिल हैं:

  • के रूप में एक ही वरीयता के साथ पार्स +:
+ -        ±                 
                         
  • के रूप में एक ही वरीयता के साथ पार्स *:
* / ÷ % &   ×                   
          ⦿             
                       

7
आप तकनीकी रूप से मैक्रों की शक्ति के साथ लगभग किसी अन्य प्रतीक को इन्फिक्स ऑपरेटर के रूप में भी इस्तेमाल कर सकते हैं! (यदि आप वास्तव में चाहते हैं)। मेरे पास एक @infix हैक था (यह जूसकप के द्वारा निहित गुणन पर निर्भर करता है) जिसने ऐसा किया julia> using InfixFunctions; @infix α(x, y) = x + y; 1 |α| 2:। ( InfixFunctions.jlखुद के लिए मैक्रो एक्सरसाइज के रूप में विकसित किया गया था, यह जूलिया के साथ काम नहीं करता है। 1.x जैसा है।)
साल्चीपापा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.