বেশিরভাগ কার্যক্ষম ভাষা লিংকযুক্ত তালিকাগুলি তাদের প্রাথমিক অপরিবর্তনীয় ডেটা কাঠামো হিসাবে ব্যবহার করে। কেন তালিকাগুলি, এবং যেমন গাছ না? গাছগুলি পাথ এবং এমনকি মডেলের তালিকাগুলি পুনরায় ব্যবহার করতে পারে।
বেশিরভাগ কার্যক্ষম ভাষা লিংকযুক্ত তালিকাগুলি তাদের প্রাথমিক অপরিবর্তনীয় ডেটা কাঠামো হিসাবে ব্যবহার করে। কেন তালিকাগুলি, এবং যেমন গাছ না? গাছগুলি পাথ এবং এমনকি মডেলের তালিকাগুলি পুনরায় ব্যবহার করতে পারে।
উত্তর:
কারণ তালিকাগুলি গাছের চেয়ে সহজ। (আপনি এটিকে তুচ্ছভাবে দেখতে পাচ্ছেন যে একটি তালিকা হ্রাসপ্রাপ্ত গাছ, যেখানে প্রতিটি নোডের একটিমাত্র শিশু থাকে))
কনস তালিকাটি স্বেচ্ছাসেবী আকারের সহজতম পুনরাবৃত্ত ডেটা কাঠামো।
ফোর্ট্রেস প্রোগ্রামিং ল্যাঙ্গুয়েজের ডিজাইনের সময় গাই স্টিল যুক্তি দিয়েছিলেন যে ভবিষ্যতের বৃহত্তর সমান্তরাল গণনাগুলির জন্য, আমাদের ডেটা স্ট্রাকচার এবং আমাদের নিয়ন্ত্রণ প্রবাহ উভয়ই এখনকার মতো লিনিয়ার নয়, একাধিক শাখার সাথে গাছের আকারযুক্ত হওয়া উচিত। তবে আপাতত, আমাদের বেশিরভাগ মূল ডেটা স্ট্রাকচার লাইব্রেরিগুলি সিক্যুয়াল, পুনরাবৃত্ত প্রক্রিয়াকরণ (বা লেজ পুনরাবৃত্তি, এটি আসলে কোনও ব্যাপার নয়, তারা একই জিনিস) মনে রাখে, সমান্তরাল প্রক্রিয়াজাতকরণ নয়।
উল্লেখ্য যে ক্লোজুরে, যার ডেটা স্ট্রাকচারগুলি বিশেষত সমান্তরাল, বিতরণ, "মেঘলা" বিশ্বের জন্য ডিজাইন করা হয়েছিল , এমনকি অ্যারে (ক্লোজারে ভেক্টর নামে পরিচিত), সম্ভবত এগুলির সমস্ত "লিনিয়ার" ডেটা কাঠামো বাস্তবে রূপায়িত হয়েছে গাছ।
সুতরাং, সংক্ষেপে: একটি কনস তালিকা হ'ল সহজতম ধ্রুব পুনরাবৃত্ত তথ্য কাঠামো এবং আরও জটিল "ডিফল্ট" চয়ন করার প্রয়োজন ছিল না। অন্যগুলি অবশ্যই বিকল্প হিসাবে উপলভ্য, যেমন হাস্কেলের অ্যারে, অগ্রাধিকারের সারি, মানচিত্র, গাদা, ট্রাপস, চেষ্টা এবং যা কিছু আপনি সম্ভবত কল্পনা করতে পারেন তবে ডিফল্টটি সাধারণ কনস তালিকাগুলি।
data Tree a = Leaf a | Branch a (Tree a) (Tree a)। এটি আপনার "সরলতা" যুক্তিটিকে শক্তিশালী করে।
Sequenceবা স্কালার Vector) চায় তবে গাছগুলি ব্যবহার করবেন না যখন তারা কেবল পড়ার প্রয়োজন হয় যেহেতু তারা সত্যিকারের ধ্রুবক সময়ে এটি অর্জন করতে পারে (উদাঃ VectorImmutableArray
pmapক্লোজুরে একটি ভেক্টরের উপর যেমন পিং এখনও ক্রমান্বয়ে প্রতিটি উপাদান অ্যাক্সেস করে; ভেক্টরের গাছের কাঠামো সাধারণত শেষ ব্যবহারকারী থেকে লুকানো থাকে।
আসলে, ঐ তালিকা আছে গাছ! আপনার দুটি ক্ষেত্র সহ নোড রয়েছে carএবং এর cdrমধ্যে আরও বেশি নোড বা পাতা থাকতে পারে। শুধু তালিকার মধ্যে যারা গাছ করে তোলে, কনভেনশন হয় ব্যাখ্যাcdr একটি রৈখিক তালিকায় পরবর্তী নোডের একটি লিঙ্ক, এবং লিঙ্কটি carবর্তমান নোডের মান হিসাবে লিঙ্ক।
এটি বলেছিল, আমি অনুমান করি যে কার্যকরী প্রোগ্রামিংয়ে লিঙ্কযুক্ত তালিকার প্রসারটি পুনরাবৃত্তির উপরে পুনরাবৃত্তির প্রসারের সাথে যুক্ত। যখন আপনার একমাত্র লুপিং নির্মাণটি (পুচ্ছ) পুনরাবৃত্তি হয়, আপনি যে ডেটা স্ট্রাকচারগুলি এটির সাথে সহজেই ব্যবহার করতে চান তা চান; এবং লিঙ্কযুক্ত তালিকাগুলি তার জন্য উপযুক্ত।