क्या कोई कीवर्ड या ऑपरेटर "नहीं" के लिए है?


56

क्या कोई ऑपरेटर न के बराबर है ? उदाहरण के लिए, मेरा पसंदीदा रंग न तो हरा है और न ही नीला है।

और कोड इसके बराबर होगा:

// example one
if (color!="green" && color!="blue") { 

}

// example two
if (x nor y) {
    // x is false and y is false
}

12
नहीं, क्योंकि हमारे पास पहले से ही orऔर !, और क्योंकि डबल नकारात्मक शायद ही कभी उपयोग किए जाते हैं - ज्यादातर लोग उन्हें पढ़ने के लिए विशेष रूप से कठिन पाते हैं।
किलन फ़ॉथ

70
@KilianFoth सही है। फिर भी नीच बुरे सवालों के लिए होना चाहिए, उन सवालों के लिए नहीं जो हमें पसंद नहीं हैं। इसके अलावा, प्रश्न को बंद करने के लिए पहले से ही तीन वोट हैं क्योंकि यह "राय आधारित" होगा, सवाल पूरी तरह से तटस्थ और गैर विवादास्पद होने के बावजूद (या तो कुछ विदेशी भाषा में ऐसे ऑपरेटर हैं या नहीं हैं)।
क्रिस्टोफ

3
क्या इसका कोई नाम है? हाँ: नहीं। क्या यह एक ऑपरेटर है? किस भाषा में? और एक भाषा दी, आप कल्पना / डॉक्स में देख सकते हैं।
जोंशरशिप

9
@ ट्रॉयर आपकी टिप्पणी समस्या को प्रदर्शित करती है: आपको तर्क गलत मिला। ;) जो एक बराबर नहीं है।
jpmc26

3
अधिक ऑपरेटरों वाली भाषाओं में, यह (उदाहरण के लिए, अजगर में) होगाcolor not in ['green', 'blue']
इज़्काटा

जवाबों:


72

हालाँकि मुख्यधारा की भाषाओं में NOR और NAND संचालक समर्पित नहीं होते हैं, कुछ कम-ज्ञात भाषाएँ (उदाहरण के लिए, कुछ "गोल्फ" भाषाएँ) करती हैं। उदाहरण के लिए, एपीएल है और के लिए और न ही और नन्द, क्रमशः।

उदाहरणों का एक और वर्ग हार्डवेयर डिज़ाइन भाषाओं में पाया जा सकता है जैसे वीएचडीएल , वेरिलोग , आदि नंद और एनओआर गेट हार्डवेयर डिज़ाइन में काफी उपयोगी होते हैं क्योंकि आमतौर पर AND / या नहीं से बने समतुल्य सर्किट की तुलना में सस्ता (कम ट्रांजिस्टर की आवश्यकता होती है)। गेट्स, जो हार्डवेयर डिजाइन भाषाओं में से एक है, उन्हें शामिल करने के लिए करते हैं; एक और कारण यह है कि वे कुछ बिट-फ़िडलिंग ट्रिक्स के लिए उपयोगी हो सकते हैं।


40
एपीएल एक गोल्फ भाषा नहीं है , बल्कि एक सरणी-उन्मुख भाषा है जो औद्योगिक ताकत के साथ पूर्ण-स्टैक मल्टी-पैराडाइम अनुप्रयोगों के इंटरैक्टिव विकास की अनुमति देता है।
अड्म


6
@EricDuminil :-) हालांकि यह सब सच है।
अड्म

20
@EricDuminil नहीं, वास्तव में। APL एक गोल्फ भाषा नहीं है, यह एक व्यावहारिक भाषा है जो गोल्फ में अच्छी होती है। इस संबंध में पर्ल समान है, नहीं?
पावेल

13
ओपी ने वास्तव में यह नहीं कहा कि एपीएल एक "गोल्फिंग" भाषा थी, बीटीडब्ल्यू।
को क्रॉफोर्ड

46

नहीं, norकिसी भी उच्च स्तरीय मुख्यधारा की प्रोग्रामिंग भाषा में कोई ऑपरेटर नहीं है ।

क्यों ?

मुख्य रूप से क्योंकि इसे पढ़ना मुश्किल है:

  • इसके लिए कई ऑपरेटरों के मानसिक संयोजन की आवश्यकता होती है (" और नहीं ", या अधिक साहित्यिक शैली में: " आगे नकारात्मक ", " प्रत्येक असत्य " )
  • इसका अर्थ notपहले ऑपरेंड पर एक निहितार्थ है , लेकिन पाठक केवल इसे बाद में समझते हैं
  • यह मानव भाषाओं से अलग है, जो पहले संचालन पर एक स्पष्ट नकार का उपयोग करती है, जैसे " न तो x और न ही y ", " न ही x और न ही y "। तो एक पाठक (x nor y)के (x and not y)बजाय के साथ भ्रमित हो सकता है((not x) and (not y))
  • कुछ पाठक स्पष्ट orअर्थ के साथ भ्रमित होते हैं जो लागू नहीं होता है

लेकिन यह हार्डवेयर में इतना आम है ...

norएक प्राथमिक हार्डवेयर गेट है जिसका उपयोग अन्य सभी तार्किक द्वार बनाने के लिए किया जा सकता है। तो कोई यह तर्क दे सकता है कि अन्य सभी तार्किक ऑपरेटर संयोजन हैं और norसबसे सरल प्राथमिक तार्किक ऑपरेटर है।

हालांकि, हार्डवेयर के लिए जो सच है वह मनुष्यों के लिए जरूरी नहीं है। और यह हार्डवेयर स्तर पर लोकप्रियता के बावजूद, कुछ मुख्यधारा सीपीयू NORअपने कोडांतरक अनुदेश सेट (जैसे x86 ) में भी प्रदान नहीं करते हैं ।

वैकल्पिक

पठनीयता मायने रखती है। और कभी-कभी अन्य तरीकों से इसमें सुधार किया जा सकता है।

मौजूदा ऑपरेटरों का उपयोग

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

if x not in [1,2]    // use of 'in' or 'not in' operator instead of x!=1 and x!=2

शर्तों का आदेश

if x==1 or x==2 
     action A
else 
     action B  

के बजाय

if x!=1 and x!=2 
    action B
else 
    action A

लूप तक का उपयोग

कुछ भाषाएं लूप निर्देश भी प्रदान करती हैं जो आपको whileया तो until"सकारात्मक" तरीके से चुनने की अनुमति देती हैं। ये निर्देश उदाहरण के लिए कर रहे हैं until c do ...में गहरे लाल रंग का , do until c ...में vb , या repeat ... until cमें पास्कल और उसके वंश।

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

Until (x==1 or x==2) do
     ...

के बराबर है:

While (x!=1 and x!=2)
    ...

एक फंक्शन करें

अब यदि आप अभी भी norवाक्य रचना पसंद करते हैं, तो आप एक फ़ंक्शन को परिभाषित कर सकते हैं, लेकिन केवल तभी जब आप शॉर्टकट होने की उम्मीद न करें:

If ( nor(x,y) )   // attention, x and y will always be evaluated
    ...  

ऑपरेटर पर फ़ंक्शन का एक पठनीयता लाभ है, क्योंकि पाठक तुरंत समझता है कि नकार सभी तर्कों पर लागू होता है। कुछ भाषाओं में आप एक फ़ंक्शन को चर की संख्या के साथ परिभाषित कर सकते हैं।


5
मजेदार, मैं आमतौर पर लिखता हूं कि जैसे while (not (x == 1 or x == 2))ही मुझे x != 1 and x != 2पढ़ने के लिए संस्करण कठिन लगता है, और यह पता चलता है कि "x न तो 1 है, न ही 2" "x नहीं 1 है, और x 2 नहीं है" की तुलना में प्रक्रिया करना बहुत आसान है।
Mael

1
@ बाल्डरिक क्या आप विस्तृत कर सकते हैं?
उम्मीद है कि

4
@HopefullyHelpful Repeat... Untilहमेशा लूप बॉडी को कम से कम एक बार निष्पादित करता है। यदि x 1 है, तो लूप बॉडी को अभी भी निष्पादित किया जाता है, लेकिन दोहराया नहीं जाता है। Whileपाश इस मामले में शरीर पर अमल नहीं होंगे।
सिना

2
@ बाल्डरिकक हाँ आप पूरी तरह से सही हैं। जब मैं बराबर लिखता हूं, मैं केवल लूप की स्थिति के बारे में बोल रहा था, क्योंकि बूलियन ऑपरेटर प्रश्न का विषय थे। धन्यवाद, मैं इसे स्पष्ट करने के लिए फिर से तैयार करूँगा
क्रिस्टोफ़

3
वेदर एक्स और वाई का nor(x,y)हमेशा मूल्यांकन किया जाता है जो भाषा पर निर्भर करता है और इसे कैसे nor()लागू किया जाता है। ऐसी भाषाएं (D, Io,…) हैं जहां तर्कों का निर्णय लिया जा सकता है कि कब और कब तर्क का मूल्यांकन किया जाए।
ब्लेक जेक

18

@ प्रश्न पर KilianFoth की टिप्पणी हाजिर है।

आप norसे संश्लेषण कर सकते हैं notऔर or:

if (x nor y)

बिल्कुल वैसा ही है

if (not (x or y))

परिचय nor(- जो आवश्यक नहीं हैं और नहीं चाहते थे या) एक अलग ऑपरेटर के रूप में भाषा को अतिरिक्तताओं, जो न तो जरूरत है, और न ही चाहता था परिचय होगा।

इसी तरह, मुझे किसी भी nandऑपरेटर के होने की भाषा के बारे में पता नहीं है - शायद इसलिए कि इसे notऔर andऑपरेटरों से संश्लेषित किया जा सकता है ।

आप सिद्धांत रूप में, केवल nandया केवल norऑपरेटरों के साथ एक भाषा बना सकते हैं । सब के सब and, orऔर notतब तक उन लोगों से synthesied सकता है। केवल समस्या यह है कि यह हास्यास्पद रूप से बेमानी होगा। उदाहरण के लिए, विकिपीडिया पर NOR तर्क और NAND तर्क देखें ।


4
अतिरेक की आवश्यकता भी नहीं हो सकती है या वह :)
डेव

@ उस सजा का इरादा था, जिसे देखकर आपको खुशी हुई ;-)
Mael

5
केवल अतिरेक वास्तव में यह नहीं समझाता है कि क्यों norशामिल नहीं है। अन्यथा, भाषाएं andऔर क्यों हैं or? वे निरर्थक हैं, डी मॉर्गन के लिए धन्यवाद। वास्तव में, आप सभी तीन पारंपरिक तार्किक ऑपरेटरों (स्थानापन्न सकता है and, or, notप्रदान करके) बस nor , जैसा कि आप ठीक ही मनाया।
कोनराड रुडोल्फ

1
@KonradRudolph तकनीकी रूप से, आप सभी को एक लैम्ब्डा ऑपरेटर चाहिए । सबसे अधिक प्रोग्रामर के मानसिक मॉडल का मिलान करने के लिए हमारे द्वारा अधिक करने का कारण है। अधिकांश प्रोग्रामर तर्क के संदर्भ में सोचते हैं and, orऔर not- क्योंकि यही सबसे अधिक मानव भाषाओं का उपयोग करता है। एक बार जब आप और / या नहीं के मानसिक मॉडल से मेल खाते हैं, तो न तो और नंद बेमानी हो जाते हैं। उनके अतिरेक को उनके नामों में भी एन्कोड किया गया है: "n (ot) और" and "n (ot) या"। यदि हमारे पास उनके लिए अलग-अलग, पहले से मौजूद अंग्रेजी शब्द हैं, और न केवल उनका संश्लेषण किया जाता है, तो आप शायद उन्हें अधिक बार देखेंगे।
आरएम

1
पुन तर्क के रूप में अतिरेक: की तुलना में अधिक के साथ भाषाओं कर रहे हैं not, and, or। उदाहरण के लिए कुछ मूल बोलियाँ (GW-BASIC, QuickBASIC,…) के पास एक्सक्लूसिव या XOR, निहितार्थ IMP (→ NOT (x XOR y)) है, और अतिरिक्त ऑपरेटरों के लिए EQV (→ NOT (x) OR y) की समानता है।
ब्लैकजैक

11

हां, एपीएल और इसकी कुछ बोलियों में तो (और नंद ) है। एपीएल में, और न ही निरूपित किया जाता है (के बाद से है या और ~है नहीं ):

 resultExampleOne color
  :If (color'green')⍱(color'blue')
      result'warm'
  :Else
      result'cold'
  :EndIf


 resultExampleTwo(x y)
  :If xy
      result'x is false and y is false'
  :Else
      result'at least one of them is true'
  :EndIf

इसे ऑनलाइन आज़माएं!


10

यह उत्तर 1960 के मध्य में बने कंप्यूटर के लिए असेंबलर भाषा से है। यह बहुत अस्पष्ट है, लेकिन कुछ मामलों में यह आपके प्रश्न को संबोधित करता है।

डीईसी (डिजिटल उपकरण निगम) ने 1960 के दशक के मध्य में पीडीपी -6 कंप्यूटर लॉन्च किया। इस मशीन में कुल 64 निर्देश थे जो दो ऑपरेंड (कुछ पतित मामलों सहित) पर बूलियन ऑपरेशन थे। ये 64 निर्देश वास्तव में प्रत्येक ऑपरेटर में 4 वेरिएंट के साथ 16 ऑपरेटर थे।

दो ऑपरेटरों, ANDCB और ORCB ने NOR और NAND को क्रमशः लागू किया (जब तक कि मैं दोहरे नकारात्मक तर्क पर मिश्रित नहीं हूं)। आप opcode तालिका देख सकते हैं । ओपकोड तालिका वास्तव में पीडीपी -6 कंप्यूटर के लिए है, जो पीडीपी -6 का उत्तराधिकारी है।

यदि आप बाइनरी में संख्यात्मक निर्देश को देखते हैं, तो यह अधिक दिलचस्प हो जाता है। यह पता चला है कि 400-477 (ऑक्टल) रेंज में सभी ऑपकोड के लिए, अनुदेश में चार बिट्स 16 संभव बूलियन ऑपरेटरों के लिए चार बिट सत्य तालिका प्रदान करते हैं। इनमें से कुछ ऑपरेटर एक या दोनों इनपुट की अनदेखी करते हैं। उदाहरण के लिए SETZ और SETO दोनों इनपुट्स को नजरअंदाज करते हैं।

PDP-6 के डिजाइनरों ने इस तथ्य का फायदा उठाया कि इन सभी निर्देशों को कम तर्क के साथ लागू करने की तुलना में उनमें से केवल कुछ को लागू करने के लिए लिया गया था। इन निर्देशों में से कुछ शायद ही कभी दिखाई दिए, यदि कभी, विधानसभा भाषा कोड में। लेकिन वे सभी वहां मौजूद थे।

तो ANDCB NOR के बराबर है। (फिर से, जब तक कि मुझे अपना तर्क पीछे की ओर नहीं मिला, जिस स्थिति में ORCB बराबर है)।


3

पर्ल में वह unlessकीवर्ड है जो आपको सशर्त रूप से पलटने देता है:

unless ($color eq 'green' or $color eq 'blue') {
    # code
}

NOR ऑपरेटर नहीं होते हुए भी, आप अपने इरादे को इसी तरह व्यक्त कर सकते हैं।


3

norऑपरेटर आप वर्णित के रूप में यह दोहराने योग्य है, जो पहचानना मुश्किल कीड़े के बहुत सारे करने के लिए नेतृत्व के लिए बाध्य है नहीं होगा।

आपका "उदाहरण 2" अनिवार्य रूप से यह है:

if (false nor false) {
becomes
if (true) {

लेकिन तीन चर के साथ फिर से कोशिश करें और देखें कि क्या होता है:

if (false nor false nor false) {
becomes
if ((false nor false) nor false) {
becomes
if (true nor false) {
becomes
if (false) {
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.