কোন অপরিহার্য প্রোগ্রামিং ভাষা পুনরাবৃত্তি সমর্থন করে না?


21

আমার জানা মতে, সমস্ত আধুনিক অত্যাবশ্যক প্রোগ্রামিং ভাষা এই পদ্ধতিতে পুনরাবৃত্তি সমর্থন করে যে কোনও পদ্ধতি নিজেই কল করতে পারে। এটি সর্বদা ক্ষেত্রে ছিল না, তবে আমি দ্রুত গুগল অনুসন্ধানের সাথে কোনও শক্ত তথ্য পাই না। সুতরাং আমার প্রশ্নটি হ'ল:

কোন ভাষাগুলি শুরু থেকেই পুনরাবৃত্তি সমর্থন করে না এবং কখন সেই সমর্থন যুক্ত করা হয়েছিল?

উত্তর:


21

আমি নিশ্চিত নন যে কোবোল (এটি অবশ্যই একসময় হয়নি) তবে আমি কেউ ভাবতে পারি না যে কাউকে বেশি যত্ন করা।

ফরট্রান 90 এর পর থেকে ফোর্টরান 90, তবে আপনার recursiveকীওয়ার্ডটি এটির জন্য আপনাকে ব্যবহার করতে হবে যে সাব্রোটিনটি পুনরাবৃত্তিযোগ্য।

পিএল / আমি প্রায় একই ছিল - পুনরাবৃত্তি সমর্থিত হয়েছিল, তবে কী পদ্ধতিগুলি পুনরাবৃত্তি হয়েছিল তা আপনাকে স্পষ্ট করে বলতে হয়েছিল।

আমি সন্দেহ করি যে এর চেয়ে আরও অনেক কিছু আছে। আপনি যখন এতে নামেন, পুনরাবৃত্তি নিষিদ্ধ করা বেশিরভাগ ক্ষেত্রে আইবিএম তাদের ভাষার নকশায় এমন কিছু করেছিল যা সাধারণ কারণে আইবিএম (৩ 360০/৩70০/30০৯০ / ...) মেইনফ্রেমগুলি হার্ডওয়্যারে স্ট্যাক সমর্থন করে না। যখন বেশিরভাগ ভাষা আইবিএম থেকে আসে, তখন তারা বেশিরভাগ পুনরাবৃত্তি নিষিদ্ধ করে। এখন যেহেতু তারা সবাই অন্য জায়গা থেকে এসেছে, পুনরাবৃত্তি সর্বদা অনুমোদিত (যদিও আমার যুক্ত হওয়া উচিত যে কয়েকটি অন্যান্য মেশিন, বিশেষত মূল ক্রেট 1, এর কোনও স্ট্যাকের জন্য হার্ডওয়্যার সমর্থন নেই))


এই সময়ের কন্ট্রোল ডেটা কম্পিউটারগুলি পুনরুক্তি সমর্থন করে না (সাব্রোটিন কলগুলি এমন একটি নির্দেশনা দিয়ে করা হয়েছিল যা কলিং নির্দেশকে +1 এ একটি জাম্প সন্নিবেশ করানোর জন্য কোডটি সংশোধিত করে)) W 66০০-এ যখন উইথ পাসকালের বিকাশ করেছিলেন, সম্ভবত তাকে সাব্রুটাইনগুলি কল করার জন্য একটি নতুন উপায় নিয়ে আসতে হবে।
ডেভিড থর্নলি

@ ডেভিড: হ্যাঁ - এবং কোনও কাকতালীয় নয়, সেগুলিও সিমুর ক্রে ডিজাইন করেছিলেন। আমি একবার পাস্কাল 6000 সংকলকটি দেখতে পেয়েছি, তবে এটি (সিমুলেট?) স্ট্যাক ফ্রেমগুলি তৈরি করতে কী করেছে তা দেখে মনে নেই।
জেরি কফিন

notably the original cray 1সুতরাং, আপনার ডায়নোসর ক্লোন করতে পুনরাবৃত্তি প্রয়োজন হবে না? আমার ধারণা গাছের উপর দিয়ে দুলতে বাঁদরটা আসলে আমাদের উপর নির্ভর করে।
normanthesquid

2
এমনকি সিএএমএল (এবং ওসিএএমএল, এফ #) এর পুনরাবৃত্ত ফাংশনগুলি স্পষ্টভাবে চিহ্নিত হওয়া দরকার।
জে কে।

1
@ পানজারিকারিসিস: আমি নিশ্চিত নই যে আইবিএম x86 এর সাথে জড়িত ছিল কি না, তবে তাদের বর্তমান মেইনফ্রেমগুলি ১৯ 19৪ সালে বাজারে এসে সরাসরি আইবিএম ৩ to এর দিকে ফিরে আসে, সুতরাং বেসিক নকশাটি কয়েক দশক বা তারও বেশি সময় ধরে x86 এর পূর্বাভাস দেয়।
জেরি কফিন 15

16

উইকিপিডিয়া বলেছেন:

ফোর্টরানের মতো প্রাথমিক ভাষাগুলি প্রাথমিকভাবে পুনরাবৃত্তি সমর্থন করে না কারণ ভেরিয়েবলগুলি স্থিতিশীলভাবে বরাদ্দ করা হয়েছিল, পাশাপাশি প্রত্যাবর্তনের ঠিকানার জন্য অবস্থান।

http://en.wikipedia.org/wiki/Subroutine#Local_variables.2C_recursion_and_re-entrancy

ফোরট্রান 77 পুনরাবৃত্তির অনুমতি দেয় না, ফোর্টরান 90 করেন, (পুনরাবৃত্ত রুটিনগুলি অবশ্যই স্পষ্টভাবে ঘোষণা করা উচিত)।

বেশিরভাগ ফোরট্রান comp 77 সংকলক পুনরাবৃত্তির অনুমতি দেয়, কিছু (যেমন: ডিসি) একটি সংকলক বিকল্প ব্যবহার করা প্রয়োজন (সংকলক বিকল্পগুলির অধ্যায়টি দেখুন)। GNU g77, যা ফোর্টরান standard 77 স্ট্যান্ডার্ডের সাথে কঠোরভাবে অনুসরণ করে, একেবারে পুনরাবৃত্তি করতে দেয় না।

http://www.ibiblio.org/pub/languages/fortran/ch1-12.html


কমপক্ষে একটি ফরট্রান comp 77 সংকলক ছিল যা প্রযুক্তিগতভাবে পুনরাবৃত্তিকে সমর্থন করেছিল, মোট ছোট সংখ্যা যে স্ট্যাক ফ্রেমগুলি আপনি এত ছোট পুনরাবৃত্তি করতে পারতেন তা অনেক সমস্যার জন্য কার্যকরভাবে ব্যবহারযোগ্য ছিল না
জে কে।

6

ওপেনসিএল প্রোগ্রামিং ভাষা পুনরাবৃত্তি সমর্থন করে না। ( ওপেনসিএল স্পেকের বিভাগ 6.8 দেখুন )

এর জন্য বর্তমান প্রেরণা হ'ল) ​​গভীর স্ট্যাকের জন্য জায়গার অভাব খ) বৃহত্তর রেজিস্টার সেটগুলির উপস্থিতি এবং বিস্তৃত ইন-আস্তরণের উপস্থিতিতে পারফরম্যান্সের জন্য অনুকূলতার জন্য প্রয়োজনীয় প্রয়োজনীয় বরাদ্দ জানতে, স্ট্যাটিকালিভাবে, জানতে আগ্রহী।

এটি অন্যান্য জিপিইউ প্রোগ্রামিং ল্যাঙ্গুয়েজে যেমন শেডার ল্যাঙ্গুয়েজে ভালভাবে প্রয়োগ হতে পারে।


2

ছোট মাইক্রোকন্ট্রোলারগুলির জন্য কিছু সি সংকলক পুনরাবৃত্তি সমর্থন করে না, সম্ভবতঃ তাদের একটি অত্যন্ত সীমিত আকার রয়েছে।


এই মাইক্রোকন্ট্রোলারগুলির মধ্যে কিছু (উদাহরণস্বরূপ PIC16 পরিবার) কেবল একটি হার্ডওয়্যার কল স্ট্যাক (নির্দেশাবলী দ্বারা অ্যাক্সেসযোগ্য নয়) এবং স্ট্যাকের অন্য কোনও রূপ নেই, সুতরাং পুনরাবৃত্তি ব্যবহার করার সময় ফাংশনগুলির স্থানীয় ভেরিয়েবলগুলি থাকতে পারে না (যেমন একটি ডেটা স্ট্যাক পরিষ্কারভাবে প্রয়োজন) তার জন্য ...) তথ্যসূত্র: en.wikedia.org/wiki/PIC_microcontroller#Stacks
এলে

1

বেসিক, লাইন-সংখ্যার দিনগুলিতে, দুর্বল পুনরাবৃত্তি সমর্থন করে। সেই সময়ের অনেকগুলি (সমস্ত?) বেসিক গসব কলগুলি সমর্থন করে তবে প্যারামিটারগুলি পাস করার কোনও সহজ উপায় বা মানগুলি এমনভাবে উপস্থাপন করে না যা এটি স্ব-কল করার জন্য কার্যকর করে।

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


1

এটি " সমর্থন " দ্বারা আপনি কী বোঝাতে চান তার উপর নির্ভর করে । পুনরাবৃত্তি সমর্থন করতে আপনার একটি স্ট্যাক প্রয়োজন যেখানে প্রতিটি পুনরায় প্রবেশদ্বারে স্থানীয় ভেরিয়েবলগুলি পুনরায় ইনস্ট্যান্ট করতে হবে।

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

এটিকে "সমর্থন" বলা যেতে পারে কিনা আমি জানি না। ঘটনাগুলি হ'ল আমি জেডএক্স-স্পেকট্রাম বেসিকের সাথে পুনরাবৃত্ত ফাংশনটি লিখেছিলাম, যেমনটি আমি ফোর্টরান in in তে কোবোলের মতো করেছিলাম ... সর্বদা সেই কৌশল দিয়ে with


1

সমাবেশ ভাষা সরাসরি পুনরাবৃত্তি সমর্থন করে না - সাধারণত "মেশিন স্ট্যাকের উপর প্যারামিটারগুলি চাপিয়ে আপনাকে" নিজেই এটি করতে হবে।


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

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

1
ঠিক আছে, পুনরাবৃত্ত কলগুলিতে প্রযুক্তিগতভাবে পরামিতিগুলির প্রয়োজন নেই, তাই না? void f() { f(); }পুনরাবৃত্ত হয়।
ব্লগবার্ড

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

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