লজিক্যাল অপারেটর হিসাবে ভাষা কেন অন্তর্ভুক্ত করে না?


60

এটি একটি আশ্চর্যজনক প্রশ্ন হতে পারে, তবে কেন অনেক ভাষায় লজিক্যাল অপারেটর হিসাবে কোনও যুক্তি নেই (জাভা, সি, সি ++, পাইথন হাস্কেল - যদিও সর্বশেষে একজন ব্যবহারকারী অপারেটরকে এটি যুক্ত করার জন্য তুচ্ছ বলে চিহ্নিত করেছেন)? আমি যুক্তিযুক্ত জড়িত লিখনকে আরও স্পষ্ট মনে করি (বিশেষত দৃ as়ভাবে বা দৃsert়তার মত প্রকাশে) তারপরে বা এর সাথে প্রত্যাখ্যান:

encrypt(buf, key, mode, iv = null) {
    assert (mode != ECB --> iv != null);
    assert (mode == ECB || iv != null);
    assert (implies(mode != ECB, iv != null)); // User-defined function
}

28
কারণ এটি সি তে রাখা হয়নি; যদি এটি রাখা হয় তবে সি ++, জাভা এবং সি # এটি থাকতে পারে।
m3th0dman

4
তবে সি এর কাছে তা নেই, কারণ এটি সমাবেশ ভাষার সাধারণ অংশ নয় of যেহেতু সমস্ত নির্দেশিকা সেট হিসাবে আমি জানি এবং অন্তর্ভুক্ত এবং এবং না জানি, তার মধ্যে অন্তর্ভুক্ত থাকা
কোনওটিই

4
এটি এলোমেলো হিসাবে বিবেচিত হয়েছিল কারণ (1) এটি "^", "ভি", "~" এর চেয়ে কম আদিম, (2) "A => বি" "~ এ ভি বি" এর সমতুল্য হওয়ায় এটি খুব সামান্য টাইপিং সংরক্ষণ করে ।
জর্জিও

4
যৌক্তিক নির্মাণগুলির সাথে লেনদেন করা ভাষাগুলির এটির সম্ভাবনা বেশি। এঁদের মধ্যে প্রধানত হয় Prolog

9
আমি অবাক হয়েছি যে আপনি assert# 1 টি # 2 এর চেয়ে বেশি পরিষ্কার বলে মনে করেন । আমি কিছু সময়ের জন্য # 1 এ তাকিয়েছি এবং এখনও তার আচরণটি স্বজ্ঞাত হিসাবে বিবেচনা করা যেতে পারে তা দেখতে পাচ্ছি না। (বিশেষত !=যুক্তি অতিরিক্ত অতিরিক্ত উল্টানো)
ক্রিস বার্ট-ব্রাউন

উত্তর:


61

এটি কখনও কখনও দরকারী, সন্দেহ নেই। এই জাতীয় অপারেটরের বিরুদ্ধে বেশ কয়েকটি বিষয় যুক্তিযুক্ত:

  • অক্ষর -এবং >মূল্যবান উভয়ই বিচ্ছিন্নতা এবং একত্রিত। অনেক ভাষা ইতিমধ্যে অন্যান্য জিনিস বোঝাতে এগুলি ব্যবহার করে। (এবং অনেকে তাদের সিনট্যাক্সের জন্য ইউনিকোড অক্ষর সেট ব্যবহার করতে পারবেন না))
  • জড়িত হওয়া খুব পাল্টা স্বজ্ঞাত, এমনকি প্রোগ্রামারগুলির মতো যুক্তিযুক্ত মনোভাবযুক্ত লোকদের কাছেও। চারটি সত্য সারণীর এন্ট্রিগুলির মধ্যে তিনটি trueবহু লোককে অবাক করে দেয়।
  • অন্যান্য সমস্ত লজিকাল অপারেটরগুলি প্রতিসম হয়, যা ->অরথোগোনালটির ব্যতিক্রম করে।
  • একই সময়ে, একটি সহজ কাজ রয়েছে: অপারেটরগুলি !এবং ব্যবহার করুন ||
  • যুক্তিযুক্ত and/ এর তুলনায় জড়িত ব্যবহার অনেক কম ব্যবহৃত হয় or

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


22
আপনার প্রথম পয়েন্টটি কেবল '->' অপারেটরের প্রতীক হিসাবে ব্যবহার করার বিরুদ্ধে তর্ক করে, আসলে অপারেটর থাকার বিরুদ্ধে নয়। অন্যরা ভাল পয়েন্ট।
আশেল্লি

14
"একই সময়ে, একটি সহজ কাজ রয়েছে: ব্যবহার! এবং &&": বাস্তবে, "->" (বা "=>", যেমন মঠে এটি বেশি ব্যবহৃত হয়) সিমুলেট করার সহজতম উপায়টি ব্যবহার করা হয় !এবং ||, না !এবং &&: A -> Bসমতুল্য হয় !A || Bযা সমতূল্য !(A && !B)
জর্জিও

22
"চারটি সত্য সারণীর এন্ট্রি থেকে তিনটি সত্যই অনেক লোককে আশ্চর্য করে।" ওয়াত। আমি একই বৈশিষ্ট্যযুক্ত অন্য অপারেটরকে জানি যা প্রায়শই ব্যবহৃত হয় ...
l0b0

9
@ l0b0, আমি সিএস অধ্যয়নরত এমন একজন প্রোগ্রামার, তবে এটি অনেক আগে ছিল। আমি ভুলে গিয়েছিলাম যে "বোঝা" দুটি অপারেন্ডের সাথে একটি আনুষ্ঠানিক অপারেশন যা সত্যের মান দেয়, তাই প্রথমে আমি এই প্রশ্নের প্রকৃতিতে বিভ্রান্ত হয়েছিলাম। প্রতিদিনের ভাষণে, আমি যখনই প্রথম অপারেন্ডটি ইতিমধ্যে সত্য বলে পরিচিত ("এক্স সত্য, তাই ওয়াই অবশ্যই সত্য হতে হবে") ব্যবহার করা হয় ever এক মিনিটের পরে, আমি মনে করি কিভাবে আনুষ্ঠানিক "বোঝায়" কাজ করে, তবে বাস্তবটি রয়ে যায় - এমনকি এমন কেউ যারা একবার আনুষ্ঠানিক যুক্তি নিয়ে পড়াশোনা করেছিলেন, তার উদ্দেশ্য আমার কাছে পরিষ্কার ছিল না। এবং যদি আমি এটি অধ্যয়ন না করে থাকি তবে এটি অবশেষে কোনও অর্থবোধ করে না।
বেন লি

5
(a) সি -> এ অপারেটর হিসাবে ব্যবহৃত হয়। সে সম্পর্কে কেউ অভিযোগ করেন না। আমি => যেভাবেই ব্যবহার করব। (খ) পাল্টা স্বজ্ঞাত কার কাছে? অন্তর্নিহিত সংজ্ঞা শুধুমাত্র এটি, একটি সংজ্ঞা। (গ) বিয়োগটি পরিবর্তনীয় নয়। সে সম্পর্কে কেউ অভিযোগ করেন না। (d) আমি মনে করি আপনি বোঝাতে চেয়েছেন! এবং || প্রাধান্য কারণ (এবং) প্রায়শই প্রয়োজন হয়। একই যুক্তি && বা || এর বিরুদ্ধে ব্যবহার করা যেতে পারে; তোমারটা নাও. (ঙ) সম্ভবত এটি এটি বেশিরভাগ ভাষায় নেই। || এর অনেক ব্যবহার || সংক্ষিপ্তভাবে এবং (অন্তত আমার কাছে) অন্তর্নিহিতভাবে জড়িত দ্বারা প্রতিস্থাপন করা যেতে পারে।
থিওডোর নরভেল

54

আমি বিশ্বাস করি উত্তরটি গাণিতিক ভিত্তিতে রয়েছে । অন্তর্নিহিতকরণ সাধারণত বুলিয়ান বীজগণিতগুলির ক্রিয়াকলাপ হিসাবে প্রাপ্ত নয়, প্রাথমিক হিসাবে ধরা হয় এবং সংজ্ঞায়িত হয়। প্রোগ্রামিং ভাষা এই সম্মেলন অনুসরণ করে।

এটি জর্জ বুলির আইনের আইন সম্পর্কিত তদন্ত (১৮৫৪) এর দ্বিতীয় অধ্যায়টির প্রথম প্রস্তাব :

ভাষার সমস্ত ক্রিয়াকলাপ, যুক্তির উপকরণ হিসাবে, নিম্নলিখিত উপাদানগুলির সমন্বয়ে লক্ষণগুলির একটি সিস্টেম দ্বারা পরিচালিত হতে পারে, যেমন:

1st। আক্ষরিক চিহ্ন, x, y এবং সি হিসাবে, বিষয়গুলিকে আমাদের ধারণার বিষয় হিসাবে উপস্থাপন করে।

2nd। +, -, × হিসাবে অপারেশনের লক্ষণগুলি মনের সেই ক্রিয়াকলাপগুলির জন্য দাঁড়িয়ে যার দ্বারা জিনিসগুলির ধারণাগুলি একত্রিত বা সমাধান করা হয় যাতে একই উপাদানগুলির সাথে জড়িত নতুন ধারণা তৈরি হয়।

3 য়। পরিচয়ের চিহ্ন, =।

এবং লজিকের এই চিহ্নগুলি তাদের ব্যবহারের ক্ষেত্রে নির্দিষ্ট আইনগুলির সাথে সামঞ্জস্য করে এবং আংশিকভাবে বীজগণিতের বিজ্ঞানের সাথে সম্পর্কিত চিহ্নগুলির আইনগুলি থেকে পৃথক হয়।

বুলের সাইন + একই "মনের ক্রিয়াকলাপ" উপস্থাপন করে যা আমরা আজ বুলিয়ান ´ওরি এবং সেটগুলির ইউনিয়ন উভয়কেই স্বীকৃত। একইভাবে লক্ষণগুলি - এবং our আমাদের বুলিয়ান অবহেলার সাথে সামঞ্জস্য করে, একটি সেট পরিপূরক, বুলিয়ান ´ এবং সেটগুলির ছেদ করে।


+1 - কঠিন উত্তর। বুলিয়ান বীজগণিত এবং যুক্তিতে সরলকরণ যা এটি প্রচুর প্রোগ্রামিং পদ্ধতিতে ড্রাইভ করতে দেয়। একটি "বোঝায় ..." ব্যবহার করা সম্ভাব্যভাবে "যত্ন করবেন না" শর্তে হস্তক্ষেপ করবে।

3
1. যে সংজ্ঞা উপর নির্ভর করে। এটি সংজ্ঞায়িত করা বা হিসাবে a || b = !(!a && !b)(আমার সাথে দেখা হয়েছে বা যুক্তিতে উদ্ভূত অপারেটর হিসাবে) সম্ভব। ২. এটি করার কারণটি সাধারণত আবেশনকে সহজ করা আমার বিশ্বাস প্রমান করে (আমরা জানি যে উদ্ভূত অপারেটরগুলি কেবলমাত্র শর্ট-কাটস তাই তাদের জন্য আমাদের আলাদা কেস রাখার দরকার নেই)। @ গ্লেনএইচ 7: শর্ত "কী যত্ন করে না"? a --> bহিসাবে একই !a || b
ম্যাকিয়েজ পাইচোটকা

3
এছাড়াও - আমাদের কাছে !=এক্সওর ( ==) এনক্সোর ( ) এর মতো অন্যান্য উত্পন্ন অপারেটর রয়েছে ...
ম্যাকিয়েজ পাইচোটকা

5
প্রকৃতপক্ষে, আপনি NAND !(a && b)বা NOR যে কোনও একটির কাছ থেকে সমস্ত কিছু অর্জন করতে পারেন !(a || b)। উদাহরণস্বরূপ, , NOT a == a NAND a, ।a AND b == NOT(a NAND b) a OR b == (NOT a) NAND (NOT b)তবে কেবল একটি ন্যান্ড অপারেটর সরবরাহ আপনাকে অনিচ্ছাকৃত ভাষাগুলির রাজ্যে রাখে (যা আশ্চর্যের সাথে ভালভাবে ফিট করে, উত্তরদাতার ব্যবহারকারীর নাম দেওয়া ;-))।
স্টিফান মাজেউভস্কি

1
@ স্টেফান: আপনি একটি আইএমপিএল থেকেও সমস্ত কিছু পেতে পারেন।
ম্যাসন হুইলারের

37

আপডেট: 2015 সালের নভেম্বর মাসে এই প্রশ্নটি আমার ব্লগের বিষয় ছিল । আকর্ষণীয় প্রশ্নের জন্য ধন্যবাদ!


ভিজ্যুয়াল বেসিক 6 (এবং ভিবিএস স্ক্রিপ্ট) এর Impএবং Eqvঅপারেটর ছিল । কেউ এগুলি ব্যবহার করেনি। দুজনকেই ভিবি.এনইটি-তে সরানো হয়েছে; আমার জ্ঞান, কেউ অভিযোগ করেনি।

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

আপনি সি-জাতীয় ভাষার উল্লেখ করেছেন। আমি সি বা সি ++ বা জাভার সাথে কথা বলতে পারি না তবে আমি সি # তে কথা বলতে পারি। আপনার বাহুর চেয়ে আক্ষরিকভাবে দীর্ঘ # সি এর জন্য ব্যবহারকারীর প্রস্তাবিত বৈশিষ্ট্যের একটি তালিকা রয়েছে। আমার জানা মতে, কোনও ব্যবহারকারী সি # টিমের কাছে এ জাতীয় কোনও অপারেটর প্রস্তাব করেননি এবং আমি সেই তালিকাটি বহুবার, বহুবার পেরিয়েছি।

যে বৈশিষ্ট্যগুলি বিদ্যমান এবং একটি ভাষায় অব্যবহৃত এবং সেগুলি অন্য ভাষায় কখনই অনুরোধ করা হয় না এটি আধুনিক প্রোগ্রামিং ভাষায় রূপান্তর করার সম্ভাবনা কম প্রার্থীরা। বিশেষ করে যখন সেখানে যথেষ্ট সময় ও শ্রম এবং অর্থ বাজেটে উপলব্ধ বৈশিষ্ট্য যে মানুষ না করতে হয় না চাই।


আইএমপি GWBASIC দিনগুলিতে অপারেটর হিসাবে ফিরে যায়। আমি এটি 1979 সাল থেকে মনে করি
zarchasmpgmr

1
আমি পড়েছি আইএমপিএল কোড চুক্তিগুলির জন্য খুব সহায়ক। (যার ভিবি নেই।)
ম্যাসন হুইলারের

3
ভিবিএস স্ক্রিপ্ট প্রোগ্রামাররা সম্ভবত এমন কোনও অপারেটর ব্যবহার করার সম্ভাব্য গ্রুপ ছিল। আমি এখনই ইচ্ছা করছি যে পাওয়ারশেলের একটি ইমপ্লিট অপারেটর ছিল যাতে আমি আরও সহজে এবং লেগেছে কিছু [switch]ফিল্টার পরামিতি প্রয়োগ করতে পারি ।
ব্রায়ানারি

আমি ডিসি বেসিক থেকে আইএমপি মনে করি। মনে নেই EQV। আমি যে অপারেটরটির প্রায়শই কামনা করি তা "এবং না" হতে হবে, যা ডান হাত অপারেটরটিকে এড়িয়ে যাওয়ার আগে প্রচার করবে। সুতরাং, 0xABCD12345678ul ~& 0x00200000u0x12145678ul এর চেয়ে 0xABCD12145678ul উপার্জন হবে।
21-24

19

আমি কেবল অনুমান করতে পারি, তবে এর কারণ হতে পারে এমন অনেকগুলি কার্য রয়েছে যা বেশ সহজ এবং পঠনযোগ্য। আসুন আপনার উদাহরণ বিবেচনা করুন:

if (mode != ECB) assert (iv != null);

assert (mode != ECB --> iv != null);  // <-- that's only one character shorter

আপনার যদি কোনও অভিব্যক্তি প্রয়োজন, বেশিরভাগ ভাষায় উপলব্ধ ইনলাইন-ইফ অপারেটর (প্রায়শই টার্নারি অপারেটর নামে পরিচিত) ব্যবহার করা যেতে পারে। মঞ্জুর, এটি এর মতো মার্জিত নয় A --> B, তবে ব্যবহারের ক্ষেত্রে সংখ্যা অপর অপারেটর যুক্ত (এবং বজায় রাখতে পারে) সমর্থন করে না:

assert (mode != ECB ? iv != null : true);

2
জোর হিসাবে - ভাল কারণ আছে। প্রথমে একটি বার্তা উত্পন্ন করবে (বহু বাস্তবায়নে) "দৃ failure় ব্যর্থতা: iv! = নাল" যখন দ্বিতীয় "দৃ failure় ব্যর্থতা: মোড! = ইসিবি -> আইভ! = নাল"।
ম্যাকিয়েজ পাইচোটকা

2
+1, আমি এই একই প্রশ্নটি জিজ্ঞাসা করতে যাচ্ছিলাম (যেহেতু আমি "জড়িত" এর সাথে খুব বেশি পরিচিত নই, তাই এটি কখনই দিনের পর দিন আসে না)। ifবিবৃতি পর্যন্ত পর্যন্ত প্রায় প্রত্যেকের কাছে পরিষ্কার নয়।
ইজকাটা

12

আইফেলের অন্তর্নিহিত রয়েছে

এটি আসলে আরও বেশি আছে। এটিতে বেশ কয়েকটি আধা-কঠোর অপারেটর রয়েছে পাশাপাশি কঠোর।

প্রোগ্রামাররা এ জাতীয় জিনিস ব্যবহার না করার কারণ হ'ল তারা কখন কী তা কীভাবে ব্যবহার করতে হয় এবং কখন তাদের ব্যবহার করতে হয় - পাশাপাশি কীভাবে তাদের সাথে নকশা তৈরি করতে হয় সে সম্পর্কে সুনির্দিষ্টভাবে জানতে প্রশিক্ষিত হয় না। যেহেতু তারা কখনও প্রশিক্ষিত হয় না, সংকলক লেখকদের কাছ থেকে তারা কখনই এটির জন্য চায় না, এজন্য সংকলক লোকেরা এই পদ্ধতিটি সংকলকটিতে রাখার ক্ষেত্রে বিরক্ত করে না। কম্পিউটার বিজ্ঞানের শিক্ষার্থীরা এবং ছায়া-বৃক্ষ প্রোগ্রামাররা যখন আরও বেশি বৃত্তাকার শিক্ষা পেতে শুরু করবে, তখন সংকলকগুলি ধরা শুরু করবে।

দেখা যাচ্ছে যে একবার আপনার যেমন বুলিয়ান অপারেটরগুলির সাথে একটি ভাষা হয়ে যায় এবং আপনি কীভাবে তাদের সাথে ডিজাইন করতে এবং সেগুলি ব্যবহার করতে জানেন তবে আপনি সেগুলি ব্যবহার করেন।

আইফেলের মধ্যে "বোঝা" কীওয়ার্ডটির ব্যবহারটি বুলিয়ান-ভারী প্রকৃতির চুক্তির দাবিগুলির কারণে ডিজাইন-বাই-কন্ট্রাক্টের কারণে বিশিষ্ট। কিছু চুক্তি রয়েছে যা কেবলমাত্র "ইমপ্লাইস" অপারেটরের সাথে সঠিক এবং দক্ষতার সাথে লেখা যায়। এরপরে এই মন্তব্যটি দাঁড় করিয়েছে যে চুক্তিবিহীন ভাষাগুলি কোনও কারণ ছাড়াই প্রশিক্ষণ, এবং ব্যবহারের প্রয়োগের কারণ ছাড়াই।

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

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

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

সুতরাং, ভাষা থেকে সরে যান, কাঁচা তত্ত্বটি একবার দেখুন এবং আবার শুরু করুন। কোনও ভাষার সীমাবদ্ধতা, সীমাবদ্ধতা এবং রঙ-কাজ আপনাকে তত্ত্বটি কী তা বলতে দেয় না। কেবল তত্ত্বের বাস্তবতাকে নিজস্ব স্বীকৃতি নির্দেশ করুন এবং তারপরে সেখান থেকে একটি ভাষা গঠনের দিকে সরানো যাক।

সেখান থেকে, আপনি কীভাবে জড়িত এবং "বোঝায়" কেবল দরকারী তা নয়, তবে মার্জিত এবং খুব দুর্দান্ত!

একটি মহান এক আছে!


7

পাইথনের এক ধরণের গোপন উপায়ে ইমপ্লিকেশন অপারেটর রয়েছে।

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

উদাহরণ দ্বারা প্রমাণ (পাইথন কোড):

print (False <= False) # This will print True.
print (False <= True)  # This will print True.
print (True <= False)  # This will print False.
print (True <= True)   # This will print True.

নিহিত অপারেটরের সত্য সারণীটি স্মরণ করুন:

LEFT RIGHT RESULT
F    F     T
F    T     T
T    F     F
T    T     T

2
এই সন্ত্রস্ত, কিন্তু দুর্ভাগ্যবশত ভুল কষাকষি বিধি রয়েছে: f() implies g()মূল্যায়নের করা উচিত নয় g()যদি f()হয় False, কিন্তু <=মূল্যায়ন করে g()এই ক্ষেত্রে।
জন পুর্ডি

2
@ জন পুরী - কড়া কথায় বলতে গেলে শর্ট সার্কিট মূল্যায়ন বাইনারি অপারেটরগুলির একটি featureচ্ছিক বৈশিষ্ট্য। প্রযুক্তিগতভাবে, এটি নিখুঁত-অপারেটরের একটি সম্পূর্ণ বৈধ বাস্তবায়ন। যা বলা হচ্ছে, আমি সত্যিই সন্দেহ করি যে গাইডো ভ্যান রসুম এমনকি এটিকে একটি বিস্মৃত-অপারেটর হিসাবে চিহ্নিত করতে চেয়েছিলেন। এটি বুলিয়ানগুলির সাথে তুলনা করার মাত্র এক ধাক্কা।
ম্যাকেনজি

অবশ্যই, আমি বলছিলাম এটি একটি আকর্ষণীয় পর্যবেক্ষণ, তবে বাস্তব প্রোগ্রামগুলিতে আপনার ব্যবহার করা উচিত এমন কিছু নয় কারণ এটি শর্ট সার্কিট নয় এবং কারও যদি তারা did_all_possible_stuff = x.do_required_stuff() and (x.supports_optional_stuff() <= x.do_optional_stuff())কাজ করার আশা করে তবে অবাক করে দিয়ে যেতে পারে।
জন পুর্ডি

2
এটি সি এবং সি ++ তেও কাজ করে।
বেন ভয়েগট

5

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


2

আমার জন্য, প্রারম্ভিক সমস্যাগুলির সাথে বড় সমস্যাটি আসে যখন প্রাথমিক অবস্থাটি মিথ্যা হয়; উদাহরণস্বরূপ: "যদি সূর্য সবুজ হয় তবে আমি একটি ফলের ব্যাট।" সত্য!

আনুষ্ঠানিক যুক্তিতে এটি যখন "অন্তর্নিহিত শর্তটি পূরণ না করে তখন মানকে" সত্য "নির্ধারণ করতে কাজ করে। তবে প্রোগ্রামিংয়ে, এটি পাল্টা স্বজ্ঞাত এবং আশ্চর্যজনক ফলাফল হতে পারে।

আমি আসলে মনে করি @ হেইনজি উপরের উদাহরণটি দেয়:

if (sun.color() == "green") then assert(me.species() == "fruitbat")

বুঝতে খুব সহজ, এবং যুক্তি ভুল বোঝার কারণে ত্রুটি কম ঝুঁকিপূর্ণ।

পরীক্ষার প্রসঙ্গে, আমি আমার অনুমানগুলি মিথ্যা হওয়ার মুহূর্তটি থামিয়ে দিয়েছিলাম:

assert(sun.color() == "green")
assert(me.species() == "fruitbat")

সুতরাং, এরিক লিপার্টের বক্তব্য, একজন প্রোগ্রামার হিসাবে আমি কখনই প্রম্পট অপারেটরটি ব্যবহার করব তা জানি না। "মিথ্যা সত্য" আচরণটি গাণিতিক, আনুষ্ঠানিক যুক্তির প্রসঙ্গে কার্যকর বলে মনে হয় তবে প্রোগ্রাম লজিকের ক্ষেত্রে অপ্রত্যাশিত ফলাফল হতে পারে।

...

সাধারণ কেউ উল্লেখ করেনি? " অপারেটর, যেখানে "এ? বি: ট্রু" হ'ল "বোঝানো" সমান। কিন্তু যখন আনুষ্ঠানিক যুক্তি "অন্য" শর্তের সাথে সত্যকে নির্ধারিত করে? " বিকাশকারীকে এটি স্পষ্টভাবে নির্ধারণ করতে দেয়।

আনুষ্ঠানিক যুক্তিতে, "সত্য" ব্যবহার করে কাজ করা হয় তবে প্রোগ্রামিংয়ে শর্তটি যদি ভুল হয় তবে এর থেকে ভাল উত্তরটি আরও বেশি "নাল" বা "শূন্য" বা "এড়িয়ে যান" বা এমনকি মিথ্যাও হতে পারে।

আমি মনে করি কাউকে কে "কে বোঝায়" কেন "?", বা "যদি" বিবৃতি, বা কেবল নিয়মিত প্রোগ্রাম প্রবাহের চেয়ে আরও কার্যকর অপারেটর তা করতে হবে।


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