কিছু কিছু ভাষার নথি কেন “সমান” না হয়ে “সমান” বলে?


23

কিছু ভাষার নথি কেন "তুলনায়" সমতুল্য "বলে" বলে?

উদাহরণস্বরূপ, পাইথন ডক্স বলে

itertools.chain(*iterables)

...

সমান :

def chain(*iterables):
    # chain('ABC', 'DEF') --> A B C D E F
    for it in iterables:
        for element in it:
            yield element

অথবা এই সি ++ রেফারেন্স উপর find_if:

এই ফাংশন টেমপ্লেটের আচরণটি সমান :

template<class InputIterator, class UnaryPredicate>
  InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (pred(*first)) return first;
    ++first;
  }
  return last;
}

যদি এটি আসল কোড না হয় তবে তারা কি এটি পোস্ট করতে পারে না? এবং যদি এটি আসল কোড হয় তবে তাদের কেন এটিকে "সম" বা "সহজ" না বলে "সমান" বলা উচিত?


2
লক্ষ্য করুন কি আপনার জন্য দেখতে find_ifহয় না সি জন্য "" ডকুমেন্টেশন ++,। যদি তা হয় তবে কাস্ট করা bool(যা আপনি নীচের উত্তরে দেখেছেন) ভুল হবে।
মেহরদাদ

3
পাইথনের ক্ষেত্রে যদি আপনি সোর্স কোডটি সন্ধান করেন তবে আপনি দেখতে পাবেন যে chainএটি সরাসরি সিতে প্রয়োগ করা হয়েছে, সুতরাং এটি সেই পাইথন কোডের সাথে "সমতুল্য" কারণ এটি একই ফলাফল তৈরি করে, তবে এটি ব্যাখ্যা করার ক্ষেত্রে কিছুটা ওভারহেড এড়িয়ে যায় বাইটকোড।
বাকুরিউ

@ মেহেরদাড আমি জানি যে এটি সরকারী দলিল নয়, এটি কেবলমাত্র উত্স যা আমি সি ++ এর বিশদগুলি সন্ধান করতে সবচেয়ে বেশি সহায়ক পেয়েছি
জন ম্যাকক্লাং

উল্লেখযোগ্যভাবে আরও ভাল কোনও উপলব্ধ থাকলেও তারা স্ট্যান্ডার্ডে যা কিছু পদ্ধতি নির্ধারণ করেছিল তা ব্যবহার করতে বাধ্য হবে।
কেভিন

উত্তর:


67

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

template<typename _InputIterator, typename _Predicate>
inline _InputIterator
__find_if(_InputIterator __first, _InputIterator __last,
    _Predicate __pred, input_iterator_tag)
{
    while (__first != __last && !bool(__pred(*__first)))
     ++__first;
       return __first;
}

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

এটি পাইথনের মতো ভাষার স্ক্রিপ্টিংয়ের ক্ষেত্রে বিশেষভাবে সত্য যে প্রয়োগকারীরা পারফরম্যান্সের কারণে সম্পূর্ণ ভিন্ন ভাষায় প্রয়োগের সিদ্ধান্ত নিতে পারে। পাইথন প্রয়োগকারী কেউ উদাহরণস্বরূপ, itertools.chain(*iterables)সি ++ এ লিখতে পারেন । এটি পুরোপুরি সূক্ষ্ম হয় যদি স্ট্যান্ডার্ডটি "সমতুল্য" হয় যতক্ষণ না কোড প্রদত্ত পাইথনের মতোই কাজ করে। মান যদি পরিবর্তে "হয়" বলে থাকে, তবে বাস্তবায়নকারীদের হয় সেই ভাষায় বাস্তবায়ন করতে হবে, না মান মানা উচিত।

সংক্ষেপে:

  1. কারণ তারা প্রদত্ত মানের চেয়ে ভাল কোড লেখার ক্ষেত্রে কোনও প্রয়োগকে আটকাতে চায় না
  2. কারণ তারা কার্যকারিতা উন্নত করতে কোনও সম্পূর্ণরূপে ভিন্ন ভাষা ব্যবহার থেকে কোনও প্রয়োগকে আটকাতে চান না

আলোকিত উত্তরের জন্য আপনাকে ধন্যবাদ! আমি সন্দেহ করি উত্তরটি এই লাইনের সাথে কিছু ছিল।
জন ম্যাকক্লুং

@ লেরনার্ড, আপনি স্টিভেনের লিঙ্ক থেকে Find_if এর সম্পূর্ণ প্রয়োগটি পড়তে আরও আলোকিত করতে পারেন। (তিনি সেখানে কী পেয়েছেন তা সত্যিই একটি উদ্ধৃতাংশ))
উইনস্টন ইওয়ার্ট

@ উইস্টনওয়ার্ট, দুর্ভাগ্যক্রমে আমি এর মতো সম্পূর্ণ বোঝার কোডের পর্যায়ে নেই, তবে আন্ডারস্কোরগুলির উদার ব্যবহার অবশ্যই আগ্রহের বিষয়!
জন ম্যাকক্লুং

9
@ লেরনার্ড: সেই অতিরিক্ত নেতৃস্থানীয় আন্ডারস্কোরগুলি যাতে মানক গ্রন্থাগারটির অভ্যন্তরীনগুলি আপনার লেখা কোডটিতে হস্তক্ষেপ না করে (ডাবল লিডিং আন্ডারস্কোর সহ নামগুলি সংকলক / স্ট্যান্ডার্ড লাইব্রেরি লেখকদের ব্যবহারের জন্য সংরক্ষিত আছে)।
বার্ট ভ্যান ইনজেন শেনৌ

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