কোনও প্রোগ্রামিং ভাষাগুলি কি তাদের পুনরায় ভিত্তি হিসাবে সাধারণ পুনরাবৃত্তি ফাংশন ব্যবহার করে?


23

এটি একটি নিষ্পাপ এবং অতএব, সম্ভবত ত্রুটিযুক্ত প্রশ্ন, তাই আগেই ক্ষমা চাই!

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

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


1
আমি বলব যে ট্যুরিং মেশিন বা সার্বজনীন রেজিস্টার মেশিনগুলি প্রসেসর পিএল (অ্যাসেম্বলি পিএল) এর একটি ভিত্তি। তাদের কোন কার্যকারিতা নেই। -recursive ফাংশন অনুজ্ঞাসূচক Pls একটি ভিত্তি। তাদের উচ্চতর অর্ডার কার্যকারিতা নেই। μ
বেরোয়াল

1
আমি প্রথম অর্ডার যুক্তি এবং প্রোলোগ সন্ধান করারও পরামর্শ দেব।
বেরোয়াল

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

উত্তর:


45

প্রশ্নের সরাসরি উত্তর: হ্যাঁ, উপর ভিত্তি করে গূঢ় এবং অত্যন্ত অকার্যকর pls হয় -recursive ফাংশন (মনে হোয়াইটস্পেস), কিন্তু কোন ব্যবহারিক প্রোগ্রামিং ভাষা উপর ভিত্তি করে তৈরি μ বৈধ কারণে -recursive ফাংশন।μμ

সাধারণ রিকার্সিভ (অর্থাত, -recursive) ফাংশন উল্লেখযোগ্যভাবে কম ভাবপূর্ণ ল্যামডা ক্যালকুলি হয়। সুতরাং, তারা প্রোগ্রামিং ভাষার জন্য একটি দুর্বল ভিত্তি তৈরি করে। আপনি এটিও সঠিক নন যে টিএমটি অত্যাবশ্যক পিএলএসের ভিত্তি: বাস্তবে, ভাল অপরিহার্য প্রোগ্রামিং ভাষাগুলি টুরিং মেশিনের তুলনায় λ- ক্যালকুলাসের অনেক বেশি কাছাকাছি ।μλ

Computability, নিরিখে -recursive ফাংশন, টুরিং মেশিন, এবং untyped λ -calculus সব সমতুল্য। তবে, টাইপযুক্ত এলসির ভাল সম্পত্তি রয়েছে যা অন্য দুজনের কোনওটিরই নেই। এটি খুব সহজ (কেবলমাত্র 3 টি সিনট্যাকটিক ফর্ম এবং 2 টি গণ্য বিধি), অত্যন্ত রচনাধর্মী, এবং তুলনামূলকভাবে প্রোগ্রামিং কনস্ট্রাক্টগুলি প্রকাশ করতে পারে। তাছাড়া, একটি সহজ টাইপ সিস্টেম দিয়ে সজ্জিত করা (যেমন, সিস্টেম এফ ω সঙ্গে বাড়ানো আমি x ), λ -calculus অত্যন্ত ভাবপূর্ণ করা যেতে পারে যে এটি সঠিকভাবে এবং compositionally সহজে অনেক জটিল প্রোগ্রামিং নির্মান প্রকাশ করতে পারেন। আপনি ডলার প্রসারিত করতে পারেনμλএফωআমিএক্সλλল্যাম্বডাস নয় এমন কন্সট্রাক্টস অন্তর্ভুক্ত করতে সহজেই ক্যালকুলাস। উপরে উল্লিখিত অন্যান্য কম্পিউটারের মডেলগুলির কোনওটি আপনাকে সেই দুর্দান্ত বৈশিষ্ট্য দেয় না।

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

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

সুতরাং, এটি কোনও কাকতালীয় ঘটনা নয় যে বেশিরভাগ প্রোগ্রামিং ভাষাগুলি কোনওভাবে -ক্যালকুলাসের ভিত্তিতে তৈরি হয় ! Λ expressiveness, compositionality এবং extensibility, যে অন্যান্য সিস্টেমের অভাব: -calculus ভাল বৈশিষ্ট্য আছে। তবে, ট্যুরিং মেশিনগুলি গণনা সংক্রান্ত জটিলতা অধ্যয়নের জন্য ভাল, এবং μ- রেকর্ডিভ ফাংশনগুলি গণনীয়তার যৌক্তিক ধারণাটি অধ্যয়নের জন্য ভাল। তারা উভয় অসামান্য বৈশিষ্ট্য যে আছে λ -calculus অভাব আছে, কিন্তু প্রোগ্রামিং ক্ষেত্রে λ -calculus পরিষ্কারভাবে ধিক্কার জানাই।λλμλλ

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

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


7
": Conway সঙ্গে কেউ প্রোগ্রাম" ... কিছু না লাইফ Conway এর গেম মধ্যে Tetris একটি পরিশ্রমী খেলা তৈরি করুন ... এছাড়াও প্রকৃতপক্ষে এটা হোয়াইটস্পেস যেমন :) যেমন বাস্তবসম্মতভাবে
আলেক্সেই Levenkov

ওয়ান ওয়ে এই দেখতে যার এমন কোন -calculus ফাংশন যা মেশিন টুরিং অনুকরণ করে সম্ভবত একটি টুরিং মেশিন যে simulates চেয়ে অনেক খাটো হবে λ -calculus (না যে আমি হয় দেখা করেছি)। λλ
অবিচ্ছিন্ন বানান

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

@ আলেক্সিলেভেনকভ চূড়ান্ত কোগল → সিজিওএল সংকলকটির চার বছরেরও বেশি সময় ধরে অনেক লোকের কাজ দরকার ছিল, যখন সেখানে হ্যাপিলি নামে একটি প্রকল্প রয়েছে, যেখানে হোয়াইটস্পেসে আরও জটিল ভাষা সংকলন করা হয়েছে, যা তাদের ফ্রি সময়ে একজন ব্যক্তি লিখেছিলেন।
অবিচ্ছিন্ন বানান

4

µ-recursive function programming languageগুগলে টাইপ করা আমাকে এই গিটহাব রেপোতে নিয়ে গেছে , সুতরাং আপনার প্রশ্নের উত্তরটি হ'ল:

হ্যাঁ, এবং একে মায়োপিয়া বলে

এটি হাস্কেল-এ লিখেছেন।


আমি যোগ চাই তবু কেউ ব্যবহারিক প্রোগ্রামিং ভাষা উপর ভিত্তি করে তৈরি -recursive ফাংশন। দেখে মনে হচ্ছে মায়োপিয়া ব্রেনফ ** কে এর এক দূর চাচাত ভাই এবং বাস্তব প্রোগ্রামিং থেকে নিরাশ হবার চেয়ে অনেক দূরে। μ
xuq01

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