PROLOG টুরিং-সম্পূর্ণ কী করে?


15

আমি জানি যে এটি প্রলোগ হ'ল টুরিং-সম্পূর্ণটি এমন একটি প্রোগ্রাম তৈরি করে টুরিং-সম্পূর্ণ হয় যা এই জাতীয় ট্যুরিং মেশিনকে অনুকরণ করে:

turing(Tape0, Tape) :-
    perform(q0, [], Ls, Tape0, Rs),
    reverse(Ls, Ls1),
    append(Ls1, Rs, Tape).

perform(qf, Ls, Ls, Rs, Rs) :- !.
perform(Q0, Ls0, Ls, Rs0, Rs) :-
    symbol(Rs0, Sym, RsRest),
    once(rule(Q0, Sym, Q1, NewSym, Action)),
    action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1),
    perform(Q1, Ls1, Ls, Rs1, Rs).

symbol([], b, []).
symbol([Sym|Rs], Sym, Rs).

action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs).
action(stay, Ls, Ls, Rs, Rs).
action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).

left([], [], Rs0, [b|Rs0]).
left([L|Ls], Ls, Rs, [L|Rs]).

সূত্র

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


4
আপনার কোড স্নিপেটে কেবল প্রলোগের বৈশিষ্ট্যগুলি আপনার প্রয়োজন।
যুবাল ফিল্মাস

1
আপনি এই প্রশ্নটি দেখেছেন ?
রাফেল

2
@ ইউভালফিল্মাস: PROLOG এ টুরিং মেশিন প্রোগ্রাম করার অন্যান্য উপায়ও থাকতে পারে।
লেনার হোয়েট

উত্তর:


18

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

আসুন সেই মুহুর্তের জন্য ধরে নেওয়া যাক আপনি ইতিমধ্যে পাটিগণিত ছিনিয়ে নিয়েছেন। আমরা অনুমান করব যা আপনার মত কোনো অ-যৌক্তিক বৈশিষ্ট্য হবে না atom_chars, assert, ইত্যাদি, যা সাধারণ দূর্ভাগ্য সক্ষম করুন।

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

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

এবং, অবশ্যই, যদি আপনার সাধারণ পুনরাবৃত্তি হয়, তবে আপনি সাধারণ একীকরণ (নির্মাণ এবং শীর্ষ স্তরের প্যাটার্নের মিল যথেষ্ট), অবহেলা, এবং কাট সহ পুরো বৈশিষ্ট্যগুলি কাটা এবং টুরিং-সম্পূর্ণতা ধরে রাখতে পারেন।



খুব ভাল পয়েন্ট। আমি মাপদণ্ডের বিষয়ে চিন্তা করছিলাম না, তবে এটি আসলে অন্য একটি পদ্ধতি।
ছদ্মনাম

0

@ ছদ্মনাম দ্বারা দুর্দান্ত উত্তরটি সম্পূর্ণ করা এবং আপনার শেষ প্রশ্নটি উল্লেখ করে "ফাংশন প্রতীকগুলি কি তারা টুরিং সম্পূর্ণ হয়?"

আপনি সম্ভবত বলতে চাইছেন: কেবলমাত্র ফাংশন প্রতীক দিয়ে তৈরি কোনও ভাষা কি টুরিং-কমপ্লিট হতে পারে?

উত্তর হ্যাঁ - এমএল এবং হাস্কেলের মতো ফাংশনাল প্রোগ্রামিং ভাষার কথা ভাবেন।

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