প্রক্রিয়া হিসাবে বাস্তবায়ন না করা ধারাবাহিকতার উদাহরণ কী?


15

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

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

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


সম্ভবত ধারাবাহিকতা এবং ডিফুনেকশনালাইজেশনটির ছেদটি: ধারাবাহিকতাগুলি ডেঙ্গু কাঠামোর মাধ্যমে ডেটা স্ট্রাকচারে রূপান্তরিত হতে পারে; দেখার জন্য একটি আকর্ষণীয় অঞ্চল হতে পারে।
ড্যান ডি

@DanD। আমি পড়তে পারি আকর্ষণীয় সাহিত্যের জন্য আপনার কোনও পরামর্শ আছে? বিষয়টি কার্যকর মনে হচ্ছে।
ডেভিড কাউডেন

উত্তর:


11

TL; ড; টাইপ ধারাবাহিকতায় উপর সর্বোচ্চ বিমূর্ততা হয়


একটি ধারাবাহিকতা হল এর ইনপুট এবং আউটপুটগুলির ধরণ

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

আপনি এই ক্লোজারটিকে এমন এক ধরণের কাছে আবদ্ধ করতে পারেন যেমন Contহাস্কেল টাইপের যেখানে আপনি "উচ্চ স্তরের বিমূর্তি" হিসাবে মনড বিমূর্তিটি পেয়ে থাকেন, এবং ধারাবাহিকতার দিকে প্রকারের পরিবর্তে প্রকারের দিকে তাকালে আপনি যে ধারাবাহিকতা পেয়ে থাকেন তার বিপরীতে বিমূর্তির অন্যান্য রূপ রয়েছে get উদাহরণস্বরূপ কেবল একটি পদ্ধতি

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

বন্ধ বনাম প্রক্রিয়া

দিনের শেষে আপনি মূলত সঠিক; ধারাবাহিকতা একটি "পদ্ধতি", যদিও আমি এটিকে বন্ধ হিসাবে উল্লেখ করি। প্রায়শই বারের ধারাবাহিকতাটি প্রথম শ্রেণীর সমাপনী হিসাবে সর্বোত্তমভাবে প্রকাশ করা হয় যা একটি আবদ্ধ পরিবেশ আবদ্ধ। খাঁটি কার্যকরী ভাষায় আপনি বলতে পারেন এটি বিশেষভাবে যুক্তিসঙ্গত নয় কারণ আপনার উল্লেখের অভাব রয়েছে; এটি সত্য তবে আপনি মানগুলি বদ্ধ করতে পারেন এবং একক অ্যাসাইনমেন্ট মানটিকে বনাম তৈরি করে তোলে the রেফারেন্সটি ঠিক একই জিনিস। এটি হাস্কেলের মধ্যে জন্ম দেয়:

(\x -> \y -> insideYIcanAccess x (and y))

যে ভাষায় বাধ্যতামূলক পরিবেশ আবদ্ধ করার দক্ষতার অভাব রয়েছে তা প্রযুক্তিগতভাবে প্রথম শ্রেণির বন্ধের অভাব হতে পারে তবে তারপরেও কিছু পরিবেশ রয়েছে (সাধারণত বিশ্বব্যাপী) যা বন্ধের জন্য উপলব্ধ।

সুতরাং আমি বলব এটির ধারাবাহিকতাটি বর্ণনা করা আরও নির্ভুল: একটি বন্ধ একটি নির্দিষ্ট উপায়ে ব্যবহৃত হচ্ছে।


উপসংহার

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

এখন " প্রশ্নবিধি ছাড়া কি আরও বিমূর্ত পদ্ধতিতে ধারাবাহিকতা প্রকাশ করার কোনও উপায় আছে?" এটিকে কোনও ধরণের হিসাবে প্রকাশ করা আপনাকে আরও বৃহত্তর বিমূর্ততা দেয়, আপনাকে ধারাবাহিকতাটিকে খুব সাধারণ উপায়ে আচরণ করার অনুমতি দেয় যাতে আপনি এটি চালিয়ে যাওয়ার চেয়ে আরও অনেক উপায়ে ধারাবাহিকতার সাথে ইন্টারঅ্যাক্ট করতে পারেন।


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

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

2

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

উদাহরণস্বরূপ, নিম্নলিখিত পাইথন প্রোগ্রামটি বিবেচনা করুন:

def my_iterator():
   yield 1
   yield 2
   yield 3

def main():
   it = my_iterator()
   x = it.next()
   y = it.next()
   z = it.next()
   print x + y + z

সুস্পষ্ট কলব্যাক সহ নিম্নলিখিত ধরণের জাভাস্ক্রিপ্ট প্রোগ্রামের মতো এটির মতো:

function my_iterator()
  return function(cb1){
    cb1(1, function(cb2){
      cb2(2, function(cb3){
        cb3(3, function(cb4){
          throw "stop iteration";
        });
      });
    });
  });
}

function main(){
   var getNext1 = my_iterator();
   getNext1(function(x, getNext2){
      getNext2(function(y, getNext3){
         getNext3(function(z, getNext4){
            console.log(x + y + z);
         });
      });
   });
}

জাভাস্ক্রিপ্ট উদাহরণটি এক ধরণের শোরগোলের কারণ প্রতিটি পদক্ষেপে ফলনকৃত মানটি ফেরত দেওয়ার পাশাপাশি পরবর্তী ধারাবাহিকতা ফিরিয়ে আনতে হবে (পাইথনে এটি পুনরুত্থানের ভিতরে থাকা ধারাবাহিকতার উপর নজর রাখে

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