ঘোষিত প্রোগ্রামিংয়ের স্বপ্ন [বন্ধ]


26

ঘোষিত প্রোগ্রামিংয়ের স্বপ্ন কেন বাস্তব হয়নি? পথে কিছু কংক্রিট বাধা কী হচ্ছে? একটি সাধারণ উদাহরণের জন্য কেন আমি বলতে পারি না

sort(A) is defined by sort(A) in perm(A) && asc(sort(A))

এবং এটি থেকে স্বয়ংক্রিয়ভাবে বাছাই করা অ্যালগরিদম পান। permমানে ক্রমবিন্যাস এবং ascআরোহণের অর্থ।


4
উপায় দ্বারা আপনার সুনির্দিষ্ট উদাহরণ ইতিমধ্যে উপলব্ধ: gkoberger.github.io/stacksort
ডেন

3
প্রোলোগের কথা শুনেছেন? কেবল "উত্তর সেট প্রোগ্রামিং" সন্ধান করুন। ডিফল্ট যুক্তি অনুসারে প্রচুর সিস্টেম রয়েছে।
schlingel

16
ঠিক আছে, এই প্রশ্নের উত্তর সহজেই দেওয়া হয়। এ জাতীয় ব্যবস্থা বাস্তবায়নের চেষ্টা করা । সাফল্যের সাথে এটি করা থেকে বিরত কী? ওডস ভাল যে আপনি যা থামিয়েছেন তা অন্য সকলকে থামিয়ে দিয়েছে।
এরিক লিপার্ট

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

3
বাছাই করা অ্যালগরিদমের আপনার বিবরণটি ঘোষণামূলক, হ্যাঁ, তবে এটি নিশ্চিত যে নরক হিসাবে কার্যকর নয়। আছে n!একটি ক্রম একাধিক বিন্যাসন এবং সবচেয়ে খারাপ ক্ষেত্রে আপনার অ্যালগরিদম একটি সাজানো এক এটি তাদের সবাইকে চেষ্টা করতে হবে। ফ্যাক্টরিয়াল সময়টি সিকোয়েন্সটি করতে পারে এমন একটি অ্যালগরিদম হিসাবে খারাপভাবে হয়।
বেঞ্জামিন হজসন

উত্তর:


8

কিছু খুব ভাল উত্তর আছে। আমি আলোচনায় অবদান রাখার চেষ্টা করব।

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

  • ইংরেজীতে সমস্যাটি সংজ্ঞায়িত করুন
  • একটি কার্যনির্বাহী সমাধান লিখুন যা যথাসম্ভব ঘোষিত; সাধারণত, এর অর্থ হ'ল আপনার প্রশ্নে ঠিক ঠিক কী রয়েছে, কেবল প্রোগলোগটি সঠিক করুন
  • সেখান থেকে, বাস্তবায়নটিকে আরও দ্রুততর করার জন্য পরিমার্জন করার পদক্ষেপ নিন

এর মাধ্যমে আমার পথে কাজ করার সময় আমি সবচেয়ে আলোকিত (আমার জন্য) পর্যবেক্ষণ করতে পেরেছিলাম:

হ্যাঁ, লেখক যে "ঘোষিত" স্পেসিফিকেশন দিয়ে শুরু করেছিলেন তার চেয়ে বাস্তবায়নের চূড়ান্ত সংস্করণটি আরও কার্যকর। এটি এখনও খুব ঘোষিত, সংক্ষিপ্ত এবং বোঝা সহজ। এর মধ্যে যা ঘটেছে তা হ'ল চূড়ান্ত সমাধান সমস্যার প্রাথমিক বৈশিষ্ট্য ক্যাপচার করে যার কাছে প্রাথমিক সমাধানটি গাফিল ছিল।

অন্য কথায়, একটি সমাধান বাস্তবায়ন করার সময়, আমরা সমস্যাটি সম্পর্কে আমাদের জ্ঞানের যতটা সম্ভব ব্যবহার করেছি। তুলনা করা:

একটি তালিকার ক্রম সন্ধান করুন যেমন সমস্ত উপাদানগুলি ক্রমবর্ধমান ক্রমে থাকে

করুন:

দুটি বাছাই করা তালিকা মার্জ করার ফলে একটি সাজানো তালিকার ফলস্বরূপ। যেহেতু ইতিমধ্যে বাছাই করা সাবলিস্ট থাকতে পারে তাই এগুলি দৈর্ঘ্য 1 এর সাবলিস্টের পরিবর্তে প্রারম্ভিক পয়েন্ট হিসাবে ব্যবহার করুন।

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

আসল প্রশ্ন হিসাবে: কিভাবে এগিয়ে? ওয়েল, একটি উপায় হ'ল আমরা কম্পিউটারে যে সমস্যাটি ঘোষণা করছি তার সম্পর্কে যথাসম্ভব জ্ঞান সরবরাহ করা।

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

  • প্রতিটি সু-সংজ্ঞায়িত রূপান্তর হ'ল ইতিমধ্যে স্থানে থাকা সীমাবদ্ধতাগুলির সংশোধন (যে বৈশিষ্ট্যগুলি জানা রয়েছে);
  • বিদ্যমান সীমাবদ্ধতার উপর নির্ভর করে কোন রূপান্তরটি সর্বোত্তম তা আমরা কম্পিউটারটিকে সিদ্ধান্ত নিতে পারি।

এখনও এটি কেন পুরোপুরি ঘটেনি, ঠিক আছে, কম্পিউটার বিজ্ঞান সত্যই একটি তরুণ ক্ষেত্র, এবং আমরা এখনও এর বেশিরভাগ অভিনবত্বের সত্যই প্রশংসা করতে পেরেছি।

দ্রষ্টব্য

"বাস্তবায়ন পরিমার্জন" দ্বারা আপনাকে আমি কী বোঝাতে চাইছি তার একটি স্বাদ দিতে: উদাহরণস্বরূপ, প্রোলোগে কোনও তালিকার শেষ উপাদান পাওয়ার সহজ সমস্যাটি ধরুন। আধ্যাত্মিক ঘোষণামূলক সমাধান বলতে হয়:

last(List, Last) :-
    append(_, [Last], List).

এখানে, এর ঘোষণামূলক অর্থটি append/3হ'ল:

List1AndList2হয় সংযুক্তকরণের List1এবংList2

যেহেতু দ্বিতীয় যুক্তিতে append/3আমাদের কেবল একটি উপাদান সহ একটি তালিকা রয়েছে এবং প্রথম যুক্তি উপেক্ষা করা হয় (আন্ডারস্কোর), আমরা মূল তালিকার একটি বিভাজন পাই যা তালিকার সামনের অংশটিকে ( List1প্রেক্ষাপটে append/3) অস্বীকার করে এবং দাবি করে যে পিছনে ( List2প্রসঙ্গে append/3) প্রকৃতপক্ষে কেবলমাত্র একটি উপাদান সহ একটি তালিকা: সুতরাং, এটি শেষ উপাদান।

প্রকৃত SWI-Prolog দ্বারা উপলব্ধ বাস্তবায়ন অবশ্য বলেছেন:

last([X|Xs], Last) :-
    last_(Xs, X, Last).

last_([], Last, Last).
last_([X|Xs], _, Last) :-
    last_(Xs, X, Last).

এটি এখনও সুন্দরভাবে ঘোষিত। উপরে থেকে নীচে পড়ুন, এটি বলে:

একটি তালিকার সর্বশেষ উপাদানটি কমপক্ষে একটি উপাদানের তালিকার জন্য অর্থবোধ করে। একজোড়া লেজের জন্য এবং তালিকার শীর্ষের জন্য সর্বশেষ উপাদানটি হ'ল: মাথা, যখন লেজটি খালি থাকে, বা খালি নয় এমন লেজের শেষ অংশ।

এই বাস্তবায়ন কেন সরবরাহ করা হচ্ছে তার কারণ হ'ল প্রোলোগের সম্পাদন মডেলকে ঘিরে ব্যবহারিক সমস্যাগুলি নিয়ে কাজ করা । আদর্শভাবে, এটি প্রয়োগ করা হয় যা কোন পার্থক্য করা উচিত নয়। একইভাবে, আমরা বলতে পারি:

last(List, Last) :-
    reverse(List, [Last|_]).

তালিকার শেষ উপাদানটি বিপরীত তালিকার প্রথম উপাদান।

আপনি যদি ভাল, ঘোষক প্রোলোলজ সম্পর্কে অনির্বাচিত আলোচনার বিষয়বস্তু পেতে চান তবে স্ট্যাক ওভারফ্লোতে প্রোলোগ ট্যাগটিতে কিছু প্রশ্ন ও উত্তর দেখুন ।


2
পুনরাবৃত্ত নকশা প্রক্রিয়াটির মাধ্যমে কীভাবে একটি ঘোষণামূলক নকশা একটি সাধারণ বিমূর্ততা থেকে আরও কংক্রিট প্রয়োগে উন্নতি করতে পারে তা দেখানোর জন্য +1 +
ব্রুস

1
@ বরিস এটি একটি ভাল উত্তর। সেই বইটি আমার বইয়ের তাকের উপর বসে আছে। এটা সম্ভবত আমি এটি খোলার সময়।
davidk01

1
@ davidk01 সেখানকার আরও ভাল একটি বই। এটি ধরে নেওয়া হয় যে আপনি প্রোলোগ এবং সাধারণভাবে প্রোগ্রামিংয়ের ক্ষেত্রে বেশ আরামদায়ক, তবে প্রোগ্রামিংয়ে এটি গ্রহণ করা পদ্ধতিটি উভয়ই বাস্তববাদী এবং খুব পুঙ্খানুপুঙ্খ।
XXX

2
@ বরিস আমি জানি যে উদাহরণটি জটিল নয় তবে পুনরাবৃত্ত ডিজাইন প্রক্রিয়াটির উত্পাদনশীলতা - ঘোষণামূলক ভাষাগুলির একটি আসল শক্তি - এবং এটি অত্যন্ত ব্যবহারিক মান, অত্যন্ত গুরুত্বপূর্ণ। ডিক্লারেটিভ ভাষাগুলি পুনরাবৃত্তিমূলক উন্নতি হেরিতে একটি স্পষ্ট, ধারাবাহিক, পুনরাবৃত্তিমূলক পদ্ধতির প্রস্তাব দেয়। জরুরী ভাষা না।
itbruce

1
"কী ভাল, তার বিষয়ে অনির্বাচিত আলোচনার পূর্ণাঙ্গতা পান" এর জন্য +1 ... খুব সত্য যে আমরা একমত হতে চাই না!
ড্যানিয়েল লিয়ন্স

50

যৌক্তিক ভাষা ইতিমধ্যে এটি করে। আপনি যেমন করছেন তেমনভাবে আপনি সাজানোর সংজ্ঞা দিতে পারেন।

মূল সমস্যাটি হল পারফরম্যান্স। কম্পিউটারগুলি প্রচুর স্টাফের কম্পিউটিংয়ে দুর্দান্ত হতে পারে তবে এগুলি অন্তর্নিহিত বোবা। কম্পিউটার যে প্রতিটি "চালাক" সিদ্ধান্ত নিতে পারে সেটিকে প্রোগ্রামার দ্বারা প্রোগ্রাম করে was এবং এই সিদ্ধান্তটি সাধারণত শেষ ফলাফলটি কেমন দেখায় তা দ্বারা বর্ণিত হয় না, তবে ধাপে ধাপে কীভাবে অর্জন করবেন, এই শেষ ফলাফলটি।

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

কোন স্তরের বিমূর্ততা ব্যবহার করা উচিত তা সিদ্ধান্ত নেওয়া প্রোগ্রামারটির কাজ। আপনি যে অ্যাপ্লিকেশনটি করছেন তার জন্য আপনি কি উচ্চ স্তরে গিয়ে এটি বিমূর্ত পদ্ধতিতে বর্ণনা করতে চলেছেন এবং পারফরম্যান্সটি হিট করে নিন বা কম এবং নোংরা হয়ে যাবেন, এতে আরও 10x বেশি সময় ব্যয় করবেন, তবে 1000x আরও পারফর্ম্যান্টের আলগোরিদিম পান?


6
এটি জানতে পারে যে গোলেম word শব্দের অর্থ "কাঁচামাল" অর্থ মেশিন / সত্তা থাকতে পারে এমন সবচেয়ে প্রাথমিক অবস্থা state
dotancohen

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

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

22
@ বার গোলেম! = গোলাম গোলাম ইহুদি লোককাহিনী থেকে এসেছে
ইউফোরিক

10
এই উত্তরটি থেকে আমার গ্রহণযোগ্যতাটি আমার ল্যাপটপে write লিখতে হবে।
ড্যান জে

45

ইউফোরিকের দুর্দান্ত পয়েন্ট ছাড়াও , আমি যুক্ত করতে চাই যে আমরা ইতিমধ্যে অনেকগুলি জায়গায় ভালভাবে কাজ করার মতো ঘোষিত ভাষা ব্যবহার করছি, অর্থাত্ কম্পিউটারটি কার্যকর কোড তৈরি করতে পারে এমন কোনও অবস্থার পরিবর্তন বা অনুরোধ করার সম্ভাবনা নেই এমন রাষ্ট্রের বর্ণনা দিচ্ছে describ ঠিক নিজের মতো:

  • এইচটিএমএল ঘোষণা করে যে কোনও ওয়েব পৃষ্ঠার সামগ্রী কী।

  • সিএসএস ঘোষণা করে যে কোনও ওয়েব পৃষ্ঠায় বিভিন্ন ধরণের উপাদানগুলির মতো দেখতে হবে।

  • প্রতিটি রিলেশনাল ডাটাবেসের একটি ডেটা সংজ্ঞা ভাষা থাকে যা ডেটাবেজের কাঠামো কী তা ঘোষণা করে।

  • এসকিউএল অপরিহার্যতার তুলনায় ঘোষণাপত্রের খুব কাছাকাছি, যেহেতু আপনি যা দেখতে চান তা এটিই বলুন এবং এটি কীভাবে ঘটতে পারে তা ডাটাবেসের ক্যোয়ারার পরিকল্পনাকারী নির্ধারণ করেন।

  • যে কেউ তর্ক করতে পারে যে বেশিরভাগ কনফিগারেশন ফাইল (.vimrc,। প্রোফাইল, .bashrc, .gitconfig) একটি ডোমেন-নির্দিষ্ট ভাষা ব্যবহার করছে যা মূলত ঘোষিত


3
আমি জিএনইউ মেক, এক্সএসএলটি, অ্যাঙ্গুলার.জেএস-কে ব্যাপকভাবে ব্যবহৃত জিনিস হিসাবে উল্লেখ করব যা ঘোষণামূলক (যদিও কৌণিক সম্ভবত সংজ্ঞাটি কিছুটা ধাক্কা দেয়)।
কে কে কোয়ান

আমাকে সেই তালিকায় নিয়মিত প্রকাশ করতে দিন add
শোভর্ন

7
লোকেদের ভুলে যাওয়ার প্রবণতা রয়েছে যে ঘোষণামূলক ভাষাগুলি সাধারণ । তারা সাধারণত সম্পূর্ণ ভাষাগুলি ট্যুর করে না। সেই তালিকায় রেজেক্স যুক্ত করুন।
slebetman

কিছুটা পেডেন্টিক তবে তবুও: প্রতিটি ডাটাবেসে একটি ডিডিএল থাকে না, কেবল বিশাল সংখ্যক স্কিমহীন নোএসকিউএল ডাটাবেসগুলির কথা ভাবেন। প্রতিটি সম্পর্কিত ডেটাবেস থাকতে পারে, কিন্তু প্রতিটি ডাটাবেস না।
মনিকা পুনরায় ইনস্টল করুন - ডার্ক্ক

1
@ ডির্ক্ক এর কথা ভেবে দেখেনি। আমার উত্তর সংশোধন করেছেন।
Ixrec

17

বিমূর্ততা ফুটো হয়

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

আপনার নির্দিষ্ট উদাহরণে, আপনি একটি বাছাই করা অ্যালগরিদম পাবেন - এর অর্থ এই নয় যে আপনি কোনও ভাল বা এমনকি কিছুটা ব্যবহারযোগ্য একটি পাবেন। আপনার প্রদত্ত সংজ্ঞাটি, যদি আক্ষরিকভাবে প্রয়োগ করা হয় (সংকলক হিসাবে সম্ভবত এটি হয়) এর ফলাফল http://en.wikedia.org/wiki/Bogosort যা বৃহত্তর ডেটাসেটের জন্য ব্যবহারযোগ্য নয় - এটি প্রযুক্তিগতভাবে সঠিক, তবে এক হাজার সংখ্যা বাছাই করার জন্য চিরন্তন প্রয়োজন ।

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


আপনি যা বলছেন তা মূলত সত্য, তবে খারাপ পারফরম্যান্স কোনও ফাঁসী বিমূর্তির লক্ষণ নয়, যদি না ইন্টারফেস / চুক্তি আপনাকে গ্যারান্টি সরবরাহ করে না যেমন কার্যকর করার সময় সম্পর্কে।
ভ্যালেনটারি

3
পিটার্স বলছেন না যে খারাপ পারফরম্যান্স লিক বিমূর্তির লক্ষণ, @ ভ্যালেনটারি। যদি কিছু থাকে তবে তিনি বিপরীতভাবে বলছেন: ভাল পারফরম্যান্স অর্জনের জন্য বাস্তবায়নের বিশদটি ফাঁস হতে বাধ্য হয়।
itbruce

2
আমি মনে করি এটি বিভ্রান্তিকর বলে মনে হচ্ছে যে বিমূর্ততাগুলি ফাঁস হয় কারণ এটি কার্যকরভাবে কীভাবে প্রভাবিত করে তা বোঝার জন্য আপনাকে বাস্তবায়ন বুঝতে হবে understand বিমূর্তির উদ্দেশ্য আপনাকে পারফরম্যান্স সম্পর্কে চিন্তাভাবনা থেকে রক্ষা করা নয়।
ডোভাল

1
@ জেমসেকফ ঘোষণামূলক প্রোগ্রামিং-এ আপনি কেবলমাত্র এমন কিছু বলবেন যে কিছু সাজানো হয়েছে। আপনি সাজানোর অর্ডারটিকে কিছু পরিবর্তনশীল / সম্পত্তির সাথে আবদ্ধ ঘোষণা করতে পারেন। এবং তারপর এটি তাই হবে। প্রতিবার নতুন ডেটা যুক্ত হওয়ার সাথে বা ক্রম পরিবর্তনগুলি সাজানোর জন্য স্পষ্টতই সাজানোর কল করতে হবে না।
হাইড

1
@ জামেস্কেফ আপনি আসলে নিজেকে চেষ্টা না করেই পয়েন্টটি দেখতে পাচ্ছেন না (আমি ঘোষণামূলক ধারণাগুলি নিয়ে খেলতে Qt এর QML এর পরামর্শ দেব)। এমন কোনও ব্যক্তির কল্পনা করুন যিনি কেবল জরুরী প্রোগ্রামিং জানেন এবং তারা বাস্তবের চেষ্টা না করেই ওওপি বা কার্যকরী প্রোগ্রামিংয়ের বিষয়টি বোঝার চেষ্টা করছেন।
হাইড 20

11

গণনামূলক ডিক্রিডিবিলিটি সর্বাধিক গুরুত্বপূর্ণ কারণ হিসাবে ডিক্লেয়ারেশনাল প্রোগ্রামিং যতটা সহজ বলে মনে হয় তত সহজে প্রমাণিত হয় নি।

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

আমি এটি পরিচিত কিছু ডোমেনের সাথে উদাহরণটি দিতে চাই।

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

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

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

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


2
"এনপি-সম্পূর্ণ সমস্যার কারণে, নেতিবাচক সিএসএস ক্লাসগুলি ইচ্ছাকৃতভাবে ভাষায় যুক্ত করা হয় না" - আপনি কী ব্যাখ্যা করতে পারেন?
জন ডিভোরাক

এটি কিছুটা অনুশীলন, তবে নেতিবাচক সিএসএস নির্বাচকদের সাথে এগুলি 3SAT সমস্যা (শেষ ধারাটি ডিওএম হ'ল) ​​-এ পুনর্লিখন করা সম্ভব, যার সাথে এটি মিলছে কিনা তা দেখার জন্য সমস্ত সম্ভাব্য সংমিশ্রণ চেষ্টা করে দেখতে হবে।
ডিবিবেকে

1
ছোট সংযোজন। সিএসএস 3 এবং 4-তে নেতিবাচক নির্বাচকদের অনুমতি দেওয়া হয়েছে, তবে: সিউডো-ক্লাসগুলি নেস্ট করা যাবে না।
দিব্বেকে

2

ডিজিটাল যুক্তি যাচাইকরণে ভাল ব্যবহারের জন্য প্রোগ্রামিং ভাষাগুলির ঘোষণা দেওয়ার ক্ষেত্রে আমাদের একটি পার্থক্য রয়েছে।

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

আরও বেশি ঘোষিত ভাষা / ভাষার উপসর্গগুলির মধ্যে একটিকে সম্পত্তি নির্দিষ্টকরণ ভাষার জন্য পিএসএল বলা হয় । একটি একজন আরটিএল মডেল পরীক্ষা যখন গুণক যা, উদাহরণস্বরূপ সব শিফট যুক্তি অপারেশন এবং একাধিক ঘড়ি চক্র চাহিদা উল্লেখ করা ওভার যোগ হয়; আপনি পদ্ধতিতে একটি সম্পত্তি লিখতে পারেন assert that when enable is high, this output will equal the multiplication of these two inputs after no more than 8 clock cycles। পিএসএল বর্ণনাটি তখন আরটিএলের সাথে একটি সিমুলেশনে চেক করা যায়, বা পিএসএল আনুষ্ঠানিকভাবে আরটিএল বর্ণনার জন্য প্রমাণিত হতে পারে।

আরও ঘোষিত পিএসএল মডেল একজনকে আরটিএল বর্ণনার অনুরূপ আচরণ বর্ণনা করতে বাধ্য করে তবে একটি সম্পূর্ণ ভিন্ন উপায়ে আরটিএলের বিরুদ্ধে স্বয়ংক্রিয়ভাবে চেক করা যেতে পারে যে তারা রাজি কিনা তা দেখার জন্য।


1

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

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

উল্লেখ্য যে এটি সাধারণ উদ্দেশ্যে প্রোগ্রামিং ভাষার জন্য প্রযোজ্য। ডোমেন নির্দিষ্ট ভাষার জন্য, ঘোষিত ভাষাগুলি আরও ভাল; এসকিউএল সম্ভবত সেরা উদাহরণ।


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

1
@itsbruce জিনিসটি হ'ল সত্যিকারের ডেটা সহজেই ADT এ ম্যাপ করা হয় না; সর্বাধিক ডাটাবেসগুলি কীভাবে কাজ করে তা ভেবে দেখুন। প্রোলোগ - এরলং হিসাবে, আপনি ঠিক বলেছেন, তারা বিভিন্ন ভাষা। আমি উল্লেখ করেছি যে একটি কার্যক্ষম এবং অন্যটি যৌক্তিক তবে আমি সম্পূর্ণ তুলনাটি মুছলে সেরা।
m3th0dman

1
@ m3th0dman একটি ডাটাবেস টিউপস / রেকর্ডের মাত্র এক টন। হাস্কেল সেখানে কিছুটা পঙ্গু হয়ে গেছে, কারণ এটির রেকর্ড নেই, তবে এর টিপলস রয়েছে এবং এমএল দুটি রয়েছে। এবং হাস্কেলের ক্ষেত্রে নতুন সিউডো-রেকর্ড ডেটাটাইপ ঘোষণার জন্য প্রয়োজনীয় বয়লারপ্লেটের পরিমাণ এখনও স্ট্যাটিক্যালি টাইপযুক্ত ওওপি ভাষায় কোনও ফ্যাক্স-স্ট্রাক্ট তৈরি করতে লাগে তার চেয়ে অনেক কম। কীভাবে সর্বাধিক ডেটা সহজেই ADT- তে ম্যাপ করা যায় না সে সম্পর্কে আপনি কী ব্যাখ্যা দিতে পারেন?
ডোভাল

1
@ এম 3 তম 0 ডিমান আহ, সেজন্যই ডাটাবেস স্কিমগুলি একটি প্রয়োজনীয় ভাষাতে কার্য সম্পাদনের জন্য উপযুক্ত হিসাবে সংজ্ঞায়িত করা হয়। ওহ, না, এটি ঘোষণামূলক ডিডিএল হবে। আসলে, ডেটা মডেলিংয়ের সামগ্রিক প্রক্রিয়াটি অ্যাপ্লিকেশনটির সাথে প্রাসঙ্গিক যা এটির সাথে কাজ করবে, ডেটা প্রবাহিত এবং কাঠামো, অ্যাপ্লিকেশন প্রয়োগকারী ভাষা নয়। কখনও কখনও এগুলি কোনও ভাষার ওও বৈশিষ্ট্য এবং এটির ওআরএম কী সমর্থন করে তা মেলানোর জন্য বিকৃত হয় তবে এটি সাধারণত একটি খারাপ জিনিস, কোনও বৈশিষ্ট্য নয়। ঘোষণামূলক ভাষাগুলি ধারণাগত / যৌক্তিক ডেটা মডেল প্রকাশের জন্য আরও উপযুক্ত suited
ব্রুস 9'15

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

0

এটি দেখতে এরকম কিছু লাগবে .. {(যাইহোক => কোনও ফাইল পড়ুন এবং ইউআরএল কল করুন) | একটি ইউআরএল কল করুন এবং একটি ফাইল পড়ুন} তবে, এটি কার্যকর করার ক্রিয়া এবং ফলস্বরূপ সিস্টেমের অবস্থার পরিবর্তন হয় তবে এটি উত্স থেকে স্পষ্ট নয়।

ঘোষণাপত্রগুলি একটি সীমাবদ্ধ রাষ্ট্রীয় মেশিন এবং এর রূপান্তরগুলি বর্ণনা করতে পারে। এফএসএম কর্ম ছাড়াই ঘোষণাপত্রের বিপরীত মত, এমনকি যদি একমাত্র পদক্ষেপটি পরের রাজ্যে পরিবর্তিত হয়।

এই পদ্ধতিটি ব্যবহার করার সুবিধাটি হ'ল রূপান্তরগুলি এবং ক্রিয়াগুলি পূর্বাভাসগুলি দ্বারা নির্দিষ্ট করা যেতে পারে যা কেবলমাত্র একের পরিবর্তে একাধিক ট্রানজিশনের ক্ষেত্রে প্রযোজ্য।

আমি জানি এটি কিছুটা অদ্ভুত শোনায় তবে ২০০৮ সালে আমি একটি প্রোগ্রাম জেনারেটর লিখেছিলাম যা এই পদ্ধতিটি ব্যবহার করে, এবং উত্পন্ন সি ++ উত্সের চেয়ে 2 থেকে 15 গুণ বেশি। আমার কাছে এখন 20,000 লাইন ইনপুট থেকে সি ++ এর 75,000 এর বেশি লাইন রয়েছে। দুটি জিনিস এটির সাথে যায়: ধারাবাহিকতা এবং সম্পূর্ণতা।

ধারাবাহিকতা: একই সাথে সত্য হতে পারে এমন কোনও দু'টি পূর্বাভাস x = 8 এবং x = 9 উভয়ই নয়, ভিন্ন ভিন্ন পরবর্তী অবস্থা হিসাবে অসামঞ্জস্যপূর্ণ ক্রিয়াকে বোঝাতে পারে।

সম্পূর্ণতা: প্রতিটি রাজ্যের স্থানান্তরের জন্য যুক্তি নির্দিষ্ট করা হয়। এগুলি> 2 ** এন স্টেটগুলির সাথে এন সাবস্টেটযুক্ত সিস্টেমগুলির জন্য পরীক্ষা করা কঠিন হতে পারে তবে আকর্ষণীয় সংমিশ্রণ পদ্ধতি রয়েছে যা সবকিছু যাচাই করতে পারে। 1962 সালে আমি 7070 মেশিনের জন্য সিস্টেমের ধরণের 1 পর্ব লিখেছিলাম, এই জাতীয় শর্তসাপেক্ষ কোড জেনারেশন এবং সংযুক্তি ডিবাগ ব্যবহার করে। বাছাই করা 8,000 লাইনের মধ্যে, প্রথম প্রকাশের দিন থেকে চিরতরে বাগের সংখ্যা শূন্য ছিল!

এই ধরণের দুই ধাপ, 12,000 লাইন, প্রথম দুই মাসে 60 টিরও বেশি ত্রুটি ছিল। এ সম্পর্কে আরও অনেক কিছু বলার আছে, তবে এটি কার্যকর হয়। যদি গাড়ী প্রস্তুতকারীরা ফার্মওয়্যারটি পরীক্ষা করার জন্য এই পদ্ধতিটি ব্যবহার করে, আমরা এখন যে ব্যর্থতাগুলি দেখছি তা আমরা দেখতে পাই না।


1
এটি সত্যই আসল প্রশ্নের উত্তর দেয় না। ধারাবাহিকতা এবং সম্পূর্ণতা ফ্যাক্টর কীভাবে সত্য যে বেশিরভাগ প্রোগ্রামিং এখনও প্রক্রিয়াভিত্তিক, ঘোষণামূলক নয়?
জে এলস্টন

আপনার খোলার অনুচ্ছেদটি আরনাউডের উত্তর প্রোগ্রামারগুলির একটি পয়েন্টের উত্তর বলে মনে হচ্ছে st স্ট্যাককেক্সচেঞ্জ / এ / ২757583৮৯৯ / 7070০৫7 , নিজেই প্রশ্নটির নয়। এটি সেখানে একটি মন্তব্য হওয়া উচিত (আমার পর্দায়, আপনার উত্তরটি এখন তার নীচে নেই, একটি জিনিসের জন্য)। আমি মনে করি আপনার বাকী উত্তরটি একটি সামান্য পরিমাণে ঘোষিত কোডের সমতুল্য আবশ্যক কোডটি কী পরিমাণে উত্পন্ন করতে পারে তার একটি চিত্রণ তবে এটি পরিষ্কার নয়। আপনার উত্তরের কিছুটা সাশ্রয় দরকার, বিশেষত প্রধান বিষয়গুলির বিষয়ে।
ব্রুস 11'15

-3

সমস্ত কিছুকে ঘোষণামূলক উপায়ে উপস্থাপন করা যায় না।

প্রায়শই, আপনি কার্যকরভাবে কার্যকর করার প্রবাহ নিয়ন্ত্রণ করতে চান want

উদাহরণস্বরূপ সিউডো কোড অনুসরণ করুন: if whatever read a file call an URL else call an URL write a file আপনি কীভাবে এটি ঘোষণামূলকভাবে উপস্থাপন করবেন?

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

এটি আপনার পরিবেশ / সিস্টেমের সাথে "মিথস্ক্রিয়া" ঘোষণামূলক নয় এমনটি প্রমাণিত করে । আই / ও সম্পর্কিত সমস্ত কিছুই সংক্ষেপে পদ্ধতিগত। কখন এবং কী ঘটতে হবে এবং কোন ক্রমে ঠিক করতে হবে to

খাঁটিভাবে গণনার সাথে সম্পর্কিত যে কোনও কিছুর জন্য ঘোষণাটি দুর্দান্ত। একটি বিশাল ফাংশনটির মতো, আপনি এক্স রাখেন এবং আপনি ওয়াই পাবেন That's এটি দুর্দান্ত। এটির একটি উদাহরণ এইচটিএমএল, ইনপুটটি পাঠ্য, আউটপুট যা আপনি আপনার ব্রাউজারে দেখেন।


2
আমি এই কিনতে না। আপনার উদাহরণ কেন ঘোষিত নয় ? এটি কি if/ else, কোন ক্ষেত্রে ঘোষিত বিকল্প বিকল্পটি কেমন হবে? এটি অবশ্যই read/ write/ callঅংশ নয়, যেহেতু তারা মানগুলির দুর্দান্ত ঘোষণামূলক তালিকা (যদি আপনি বোঝাচ্ছেন যে তারা মোড়কে দিচ্ছেন {...; ...}, তবে কেন তারা মোড়কে [..., ...]রাখছেন?) অবশ্যই তালিকাটি কেবল নিখরচায় মনোয়েড; আবার অনেকেই করতেন। আমি এখানে দেখছি না কেন মনাদ এখানে প্রাসঙ্গিক; তারা কেবল একটি এপিআই। ম্যানুয়াল রচনাটিকে সহায়তা করার জন্য হাস্কেল স্ট্রিমগুলি -> মনাদ থেকে গেছে তবে লজিক ভাষাগুলি স্বয়ংক্রিয়ভাবে অনুসারে তালিকাগুলি রচনা করতে পারে।
ওয়ারবো

2
একা একা মনডাদের জন্য। 1. তারা প্রকৃতপক্ষে বহিরাগত নয় (তালিকাগুলি এবং সেটগুলি মনাদস এবং প্রত্যেকে সেগুলি ব্যবহার করে)। 2. তারা জিনিষ একটি নির্দিষ্ট ক্রমানুসারে কাজ করতে হবে অত্যাচার সঙ্গে কিছুই করার আছে (Haskell, কি করতে স্বরলিপি সৌন্দর্য অনুজ্ঞাসূচক কিন্তু নয়)। ঘোষণামূলক / কার্যকরী ভাষা সম্পর্ক এবং নির্ভরতা নির্দিষ্ট করে। এক্স ফাংশন এক্সটির জন্য যদি ইনপুট ওয়াইয়ের প্রয়োজন হয় তবে এক্স এর আগে ওয়াই উত্পন্ন হবে the নির্ভরতা ঠিকঠাক পান এবং ইভেন্টগুলির যথাযথ ক্রমটি নিজেরাই সংজ্ঞায়িত হবে। অনেকগুলি ইন্টারঅ্যাকশন ইভেন্ট সেট চালিত হয়, এক সেট ক্রম নয়। ঘোষিত ভাষাগুলি ইভেন্টগুলিতে প্রতিক্রিয়া বেশি শক্ত করে না।
itbruce

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

1
@Itsbruce উদাহরণ ছাড়াও প্রতিক্রিয়াশীল প্রোগ্রামিংটিকে ঘোষণামূলক হিসাবে বিবেচনা করা হয় এবং এটি পরিবেশের সাথে ইন্টারঅ্যাকশন সম্পর্কে।
ম্যাকিয়েজ পাইচোটকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.