“না” এর জন্য কিওয়ার্ড বা অপারেটর রয়েছে?


56

সেখানে একজন অপারেটর সমতূল্য না ? উদাহরণস্বরূপ, আমার প্রিয় রঙ সবুজ বা নীল নয়।

এবং কোডটি সমান হবে:

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

}

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

12
না, কারণ আমাদের ইতিমধ্যে রয়েছে orএবং !এবং ডাবল নেগেটিভ খুব কমই ব্যবহৃত হয় - বেশিরভাগ লোক এগুলি পড়তে বিশেষত কঠিন বলে মনে করে।
কিলিয়ান ফট

70
পছন্দ করুন তবুও ডাউনভোটগুলি খারাপ প্রশ্নের জন্য হওয়া উচিত, এমন প্রশ্নের জন্য নয় যা আমরা পছন্দ করি না। তদুপরি, প্রশ্নটি বন্ধ করার জন্য ইতিমধ্যে তিনটি ভোট রয়েছে কারণ প্রশ্নটি সম্পূর্ণরূপে নিরপেক্ষ এবং অ বিতর্কিত হওয়া সত্ত্বেও এটি "মতামত ভিত্তিক" হবে (হয় কিছু বিদেশী ভাষায় এই ধরনের অপারেটর রয়েছে বা নেই)।
ক্রিস্টোফ

3
এর নাম আছে কি? হ্যাঁ: না এটা কি অপারেটর? কোন ভাষায়? এবং একটি ভাষা দেওয়া হয়েছে, আপনি স্পেস / ডক্সে এটি সন্ধান করতে পারেন।
jonrsharpe

9
@ ট্রায়ার আপনার মন্তব্যটি সমস্যাটি দেখায়: আপনার যুক্তিটি ভুল হয়েছে। ;) এটি কোনওর সাথে সমান নয়।
jpmc26

3
আরও অপারেটর সহ ভাষাগুলিতে, এটি হবে (উদাহরণস্বরূপ, পাইথনের ক্ষেত্রে)color not in ['green', 'blue']
ইজকাটা

উত্তর:


72

যদিও মূলধারার ভাষাগুলিতে NOR এবং NAND অপারেটর নিবেদিত নেই, কিছু কম-পরিচিত ভাষা (উদাহরণস্বরূপ, কিছু "গল্ফিং" ভাষা) করে। উদাহরণস্বরূপ, APL হয়েছে এবং জন্য, না এবং NAND যথাক্রমে।

হার্ডওয়্যার ডিজাইনের ভাষাগুলিতে যেমন ভিএইচডিএল , ভেরিলোগ , ইত্যাদির মতো আরও একটি শ্রেণির উদাহরণ পাওয়া যায় NA গেটস, যা হার্ডওয়্যার ডিজাইনের ভাষাগুলির অন্তর্ভুক্ত করার অন্যতম কারণ; আর একটি কারণ হ'ল তারা নির্দিষ্ট বিট-ফিডিং কৌশলগুলির জন্য কার্যকর হতে পারে।


40
এপিএল একটি গল্ফিং ভাষা নয় , বরং একটি অ্যারে-ওরিয়েন্টেড ভাষা যা শিল্প শক্তি সহ পূর্ণ-স্ট্যাক মাল্টি-প্যারাডিম অ্যাপ্লিকেশনগুলির ইন্টারেক্টিভ বিকাশের অনুমতি দেয়।
অ্যাডম

59

6
@ এরিকডুমিনিল :-) যদিও এটি সত্য।
অ্যাডম

20
পছন্দ করুন এপিএল কোনও গল্ফ করার ভাষা নয়, এটি একটি ব্যবহারিক ভাষা যা গল্ফ করার ক্ষেত্রে ভাল হয়। পার্ল এক্ষেত্রে কি একই রকম, না?
পাভেল

13
ওপি আসলে বলেনি যে এপিএল একটি "গল্ফিং" ভাষা, বিটিডব্লিউ।
উইল ক্রফোর্ড

46

না, norকোনও উচ্চ স্তরের মূলধারার প্রোগ্রামিং ভাষায় কোনও অপারেটর নেই ।

কেন?

মূলত এটি পড়া কঠিন কারণ:

  • এটির জন্য বেশ কয়েকটি অপারেটরের মানসিক সংমিশ্রণ প্রয়োজন (" এবং না ", বা আরও সাহিত্যিক স্টাইলে: " আরও নেতিবাচক ", " প্রতিটি অসত্য " )
  • এটি notপ্রথম অপারেন্ডে অন্তর্নিহিত বোঝায় তবে পাঠক কেবল এটি পরে বুঝতে পারেন
  • এটি মানব ভাষাগুলির থেকে পৃথক, যা প্রথম অপারেন্ডে একটি স্পষ্ট অবহেলা ব্যবহার করে, যেমন " না এক্স বা y ", " এক্স বা 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মধ্যে Pascal এবং তার বংশধরদের।

উদাহরণ স্বরূপ:

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 হয় না" find
মেল

1
@ বালড্রিক আপনি কীভাবে বিস্তারিত বলতে পারবেন?
আশাকরি

4
@ আশাবাদী হেল্পফুল Repeat... Untilসর্বদা লুপ বডিটি অন্তত একবার চালিত করে। যদি x 1 হয়, লুপের বডিটি এখনও কার্যকর হয় তবে পুনরাবৃত্তি হয় না। Whileলুপ এই ক্ষেত্রে শরীর চালানো হবে না।
সিনা

2
@ বালড্রিক্ক হ্যাঁ আপনি পুরোপুরি ঠিক আছেন। যখন আমি সমতুল্য লিখি, তখন আমি কেবল লুপের অবস্থা সম্পর্কেই বলছিলাম, কারণ বুলিয়ান অপারেটররা প্রশ্নের বিষয় ছিল। আপনাকে ধন্যবাদ, আমি এটি স্পষ্ট করে বলতে চাই
ক্রিস্টোফ

3
ওয়েটার এক্স এবং ওয়াই ইন nor(x,y)সর্বদা মূল্যায়ন হয় ভাষা এবং কীভাবে nor()এটি প্রয়োগ করা হয় তার উপর নির্ভর করে । ভাষা আছে (ডি, আইও,…) যেখানে ডাকা ফাংশন সিদ্ধান্ত নিতে পারে কোথায় এবং কখন যুক্তি মূল্যায়ন করতে হবে।
ব্ল্যাকজ্যাক

18

প্রশ্নে @ কিলিয়ানফথের মন্তব্য স্পট রয়েছে।

আপনি সমন্বয় করতে 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
রিডানড্যান্সির প্রয়োজনও বা প্রয়োজন হতে পারে না :)
ডেভ

@ ডেভ সেই শঙ্কার উদ্দেশ্য ছিল, আপনাকে লক্ষ্য করে দেখে খুশি ;-)
মেল ১১ ই

5
রিডানড্যানসিস একা সত্যই ব্যাখ্যা করে norনা কেন অন্তর্ভুক্ত করা হয়নি। অন্যথায়, ভাষা আছে andএবং কেন or? তারা নিরর্থক, ডি মরগানকে ধন্যবাদ। আসলে, আপনি সব তিনটি প্রচলিত লজিক্যাল অপারেটর (প্রতিস্থাপন পারে and, or, notপ্রদানের মাধ্যমে) মাত্র nor , আপনি ন্যায়ত পালিত।
কনরাড রুডল্ফ

1
প্রযুক্তিগতভাবে কনড্রাড রুডল্ফ, আপনার যা দরকার তা ল্যাম্বডা অপারেটর । আমরা বেশি করার কারণটি হ'ল বেশিরভাগ প্রোগ্রামারদের মানসিক মডেলটি মেলাতে হয়। বেশিরভাগ প্রোগ্রামাররা যুক্তি বিবেচনা করে and, orএবং not- কারণ এটি বেশিরভাগ মানব ভাষা ব্যবহার করে। একবার এবং / বা / না এর মানসিক মডেলটির সাথে আপনি মেলে, তারপরেও & ননড্ড হয়ে উঠবে না। তাদের অপ্রয়োজনীয়তা এমনকি তাদের নামে এনকোড করা রয়েছে: "এন (ওটি) এবং" এবং "এন (ওটি) বা"। আমাদের যদি তাদের জন্য স্বতন্ত্র, প্রাক-বিদ্যমান ইংরেজি শর্তাদি থাকে এবং কেবল সংশ্লেষিত শব্দগুলি না থাকে তবে আপনি সম্ভবত সেগুলি আরও প্রায়ই দেখতে পেতেন।
আরএম

1
পুনরায় আর্গুমেন্ট হিসাবে অতিরেক: বেশি ভাষায় আছে not, and, or। উদাহরণস্বরূপ কিছু বেসিক উপভাষাগুলির (জিডাব্লু-বেসিক, কুইকবাসিক,…) এক্সক্লুসিভ বা এক্সওআর, ইমপ্লিকেশন আইএমপি (→ নট (এক্স এক্সওর ওয়াই)), এবং সমতুল্য EQV (→ নয় (x) বা y) অতিরিক্ত অপারেটর হিসাবে রয়েছে।
ব্ল্যাকজ্যাক

11

হ্যাঁ, এপিএল এবং এর কয়েকটি উপভাষার না (এবং নান্দ ) রয়েছে। APL সালে কিংবা বোঝানো হয় (যেহেতু হয় বা এবং ~হয় না ):

 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 এর দশকের মাঝামাঝি সময়ে তৈরি কম্পিউটারের জন্য এসেম্বলারের ভাষা থেকে। এটি বেশ অস্পষ্ট, তবে কিছু দিক থেকে এটি আপনার প্রশ্নের সমাধান করে।

ডিসি (ডিজিটাল সরঞ্জাম কর্পোরেশন) ১৯60০ এর দশকের মাঝামাঝি সময়ে পিডিপি -6 কম্পিউটার চালু করে। এই মেশিনটিতে মোট instructions৪ টি নির্দেশনা ছিল যা দুটি অপারেন্ডে বুলিয়ান অপারেশন ছিল (কিছু অবক্ষয়জনিত মামলা সহ)। এই instructions৪ টি নির্দেশাবলী হ'ল প্রতিটি অপারেটরে 4 টি ভেরিয়েন্ট সহ 16 অপারেটর।

অপারেটরগুলির মধ্যে দুটি, ওআরসিবি এবং ওআরসিবি যথাক্রমে NOR এবং NAND প্রয়োগ করেছে (যদি না আমি দ্বৈত নেতিবাচক যুক্তিতে মিশ্রিত না হই)) আপনি অপকোড টেবিলটি দেখতে পাবেন । অপকোড টেবিলটি পিডিপি -10 কম্পিউটারের জন্য, পিডিপি -6 এর উত্তরসূরি।

আপনি যদি বাইনারিতে সংখ্যাসূচক নির্দেশনাটি লক্ষ্য করেন তবে এটি আরও আকর্ষণীয় হয়। দেখা যাচ্ছে যে 400-477 (অষ্টাল) পরিসরের সমস্ত অপকডগুলির জন্য, নির্দেশে চার বিট নিজেই 16 টি সম্ভাব্য বুলিয়ান অপারেটরদের জন্য একটি চার বিট সত্য টেবিল সরবরাহ করে। এই অপারেটরগুলির মধ্যে কিছু একটি বা উভয় ইনপুট উপেক্ষা করে। উদাহরণস্বরূপ SETZ এবং SETO উভয় ইনপুট উপেক্ষা করে।

PDP-6 এর ডিজাইনাররা এই নির্দেশকে কেবলমাত্র কিছু বাস্তবায়নের জন্য গ্রহণযোগ্য ব্যবস্থার চেয়ে কম যুক্তি দিয়ে বাস্তবায়নের জন্য এই সত্যটি কাজে লাগিয়েছে। এই নির্দেশাবলীর মধ্যে কয়েকটি অ্যাসেম্বলি ভাষার কোডে খুব কমই উপস্থিত হয়েছিল। তবে তারা সেখানে ছিল।

সুতরাং ANDCB হল NOR এর সমতুল্য। (আবারও, যদি না আমি আমার যুক্তিটি পিছনের দিকে না পেয়ে থাকি তবে এই ক্ষেত্রে ওআরসিবি সমতুল্য)।


3

পার্লের unlessকীওয়ার্ড রয়েছে যা আপনাকে শর্তসাপেক্ষে বিপরীত করতে দেয়:

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

নোর অপারেটর না হয়েও আপনি একইভাবে আপনার অভিপ্রায় প্রকাশ করতে পারেন।


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) {
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.