অলস মূল্যায়ন কেন সর্বত্র ব্যবহৃত হচ্ছে না?


32

আমি কেবল শিখেছি কীভাবে অলস মূল্যায়ন কাজ করে এবং আমি ভাবছিলাম: বর্তমানে উত্পাদিত প্রতিটি সফ্টওয়্যারটিতে অলস মূল্যায়ন প্রয়োগ করা হয় না কেন? কেন এখনও আগ্রহী মূল্যায়ন ব্যবহার করছেন?


2
আপনি পরিবর্তনীয় স্থিতি এবং অলস মূল্যায়ন মিশ্রিত করলে কী ঘটতে পারে তার একটি উদাহরণ এখানে। alicebobandmallory.com/articles/2011/01/01/…
জোনাস এলফস্ট্রাম

2
@ জোনাসেলস্ট্রোম: দয়া করে, পরিবর্তিত অবস্থাকে তার সম্ভাব্য বাস্তবায়নের একটিতে বিভ্রান্ত করবেন না। মিউটেবল স্টেটটি মূল্যবোধের অসীম, অলস প্রবাহটি ব্যবহার করে প্রয়োগ করা যেতে পারে। তাহলে আপনার পরিবর্তনশীল ভেরিয়েবলগুলির সমস্যা নেই।
জর্জিও

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

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

আরও রয়েছে দুটি ক্লাসিয়াল প্রোগ্রামিং ল্যাঙ্গুয়েজ (বা কমপক্ষে উভয়ই কার্যকরী বলে দাবি করেছেন), আবশ্যকীয় কার্যকরী ভাষাগুলি যেমন ক্লোজার, স্কেলা এবং ঘোষণাপত্র যেমন হাস্কেল, ওক্যামল।
ALXGTV

উত্তর:


38

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

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

তৃতীয়ত, অলস মূল্যায়ন নিয়ন্ত্রণের ক্ষতি বোঝায়। যদি আমি কোনও ডিস্ক থেকে কোনও ফাইল পড়া অলসভাবে মূল্যায়ন করি? নাকি সময় পাচ্ছেন? এটা গ্রহণযোগ্য নয়।

আগ্রহী মূল্যায়ন আরও দক্ষ এবং আরও নিয়ন্ত্রণযোগ্য হতে পারে এবং তুচ্ছভাবে অলস মূল্যায়নে রূপান্তরিত হয়। আপনি কেন অলস মূল্যায়ন চান?


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

3
শেষ অনুচ্ছেদ ব্যতীত আপনার সকলের সাথে একমত। চেইন অপারেশন
চলাকালীন

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

1
@ ডেড এমএমজি আপনার কোডটি সমাপ্ত হয় বা না সে সম্পর্কে আপনি যদি চিন্তা করেন না তবে ... আপনি কী head [1 ..]আগ্রহের সাথে মূল্যায়ন করেছেন খাঁটি ভাষায়, কারণ হাস্কেল এটি দেয় 1?
সেমিকোলন

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

17

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

একদিকে নোটে হাস্কেল সবকিছুর জন্য অলস মূল্যায়ন ব্যবহার করে। এটি সম্ভব কারণ এটি একটি কার্যকরী ভাষা এবং রাষ্ট্র ব্যবহার করে না (কয়েকটি ব্যতিক্রমী পরিস্থিতিতে যেখানে সেগুলি স্পষ্টভাবে চিহ্নিত করা হয়েছে ব্যতীত)


হ্যাঁ, পরিবর্তনীয় অবস্থা + অলস মূল্যায়ন = মৃত্যু। আমি মনে করি আমার এসআইসিপি ফাইনালে আমি যে পয়েন্টগুলি হারিয়েছি তা হ'ল set!অলস স্কিম ইন্টারপ্রেটার ব্যবহার করা । > :(
টিখন জেলভিস

3
"অলস কোড এবং রাজ্য খারাপভাবে মিশতে পারে": আপনি কীভাবে রাষ্ট্র প্রয়োগ করবেন তার উপর এটি নির্ভর করে। আপনি যদি ভাগ করে নেওয়া পরিবর্তনীয় ভেরিয়েবলগুলি ব্যবহার করে এটি প্রয়োগ করেন এবং আপনি যদি আপনার রাষ্ট্রের সাথে সামঞ্জস্য বজায় রাখার জন্য মূল্যায়নের ক্রমের উপর নির্ভর করেন তবে আপনি ঠিক বলেছেন।
জর্জিও

14

অলস মূল্যায়ন সবসময় ভাল হয় না।

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

অলস মূল্যায়ন সম্পর্কে ভাল জিনিস যখন এটি আপনাকে পরিষ্কার কোড লিখতে দেয়; অসীম প্রাকৃতিক সংখ্যা তালিকা ফিল্টার করে 10 তম প্রাইম প্রাপ্তি এবং তালিকার 10 তম উপাদানটি গ্রহণের অগ্রযাত্রার সবচেয়ে সংক্ষিপ্ত এবং স্পষ্ট উপায়: (সিউডোকোড)

let numbers = [1,2...]
fun is_prime x = none (map (y-> x mod y == 0) [2..x-1])
let primes = filter is_prime numbers
let tenth_prime = first (take primes 10)

আমি বিশ্বাস করি অলসতা ছাড়াই এত সংক্ষেপে জিনিস প্রকাশ করা বেশ কঠিন হবে।

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

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

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


সত্যিকারের চালাক সংকলকের পক্ষে ওভারহেডকে উল্লেখযোগ্যভাবে প্রশমিত করা সম্ভব হবে কি ? বা অতিরিক্ত অপ্টিমাইজেশনের জন্য এমনকি অলসতার সুযোগ গ্রহণ করবেন?
টিখন জেলভিস

3

উত্সাহী এবং অলস মূল্যায়নের পক্ষে ও কুফলগুলির একটি সংক্ষিপ্ত তুলনা এখানে দেওয়া হল:

  • আগ্রহী মূল্যায়ন:

    • অকারণে স্টাফ মূল্যায়ন করার সম্ভাব্য ওভারহেড।

    • আনহাইন্ডার্ড, দ্রুত মূল্যায়ন।

  • অলস মূল্যায়ন:

    • কোন অপ্রয়োজনীয় মূল্যায়ন নেই।

    • কোনও মানের প্রতিটি ব্যবহারে বুককিপিং ওভারহেড।

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

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

ফলস্বরূপ, অলস মূল্যায়ন কেবল গড় হিসাবে অর্থ প্রদান করে না, উত্সাহী মূল্যায়ন আধুনিক কোডের জন্য আরও ভাল ফিট।


1
"কোনও মানের প্রতিটি ব্যবহারে বুককিপিং ওভারহেড" ": আমি মনে করি না যে জাকির মতো কোনও ভাষায় নাল রেফারেন্সের জন্য চেক বুককিপিং ওভারহেডের চেয়ে বড় say উভয় ক্ষেত্রেই আপনাকে এক বিট তথ্য পরীক্ষা করতে হবে (নাল / নন-নাল বনাম মূল্যায়ন / মুলতুবি) এবং প্রতিবার যখন আপনি কোনও মান ব্যবহার করেন তখন আপনাকে তা করতে হবে। সুতরাং, হ্যাঁ, ওভারহেড রয়েছে তবে এটি ন্যূনতম।
জর্জিও

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

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

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

2
অলস মূল্যায়ন সহ ভাষাগুলির সাথে অভিজ্ঞতার বাইরে এটি একটি উত্তর বলে মনে হচ্ছে। উদাহরণস্বরূপ, অসীম ডেটা স্ট্রাকচার সম্পর্কে কী?
আন্দ্রেস এফ।

3

@ ডেড এমএমজি হিসাবে উল্লেখ করা হয়েছে যে অলস মূল্যায়নের জন্য বইয়ের উপরের উপরে রাখার প্রয়োজন রয়েছে। আগ্রহী মূল্যায়নের তুলনায় এটি ব্যয়বহুল হতে পারে। এই বিবৃতি বিবেচনা করুন:

i = (243 * 414 + 6562 / 435.0 ) ^ 0.5 ** 3

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

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

অলস মূল্যায়ন ডেটা লোড করার পক্ষে সবচেয়ে উপযুক্ত which মূল কার্যকারিতার চেয়ে কেসগুলি প্রান্তিক করা আরও উপযুক্ত।

সাধারণভাবে যত তাড়াতাড়ি সম্ভব অ্যাক্সেস করা জিনিসগুলি মূল্যায়ণ করা ভাল অনুশীলন। অলস মূল্যায়ন এই অনুশীলনের সাথে কাজ করে না। আপনি যদি সর্বদা কিছু অ্যাক্সেস করতে চান তবে সমস্ত অলস মূল্যায়ন হ'ল ওভারহেড যুক্ত করা। অলস মূল্যায়ন ব্যবহারের ব্যয় / সুবিধা হ্রাস হওয়ায় আইটেমটি অ্যাক্সেস হওয়ার সম্ভাবনা কম হয়ে যায়।

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

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


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

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

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

3

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

[True, True, True, ... False]

এটি করতে গেলে তালিকার প্রতিটি উপাদানকে আমাদের দেখতে হবে, তা যাই হোক না কেন, অলসভাবে মূল্যায়ন কেটে যাওয়ার কোনও সম্ভাবনা নেই। তালিকার সমস্ত বুলিয়ান মানগুলি সত্য কিনা তা নির্ধারণ করতে আমরা একটি ভাঁজ ব্যবহার করতে পারি। যদি আমরা একটি ভাঁজ ডানটি ব্যবহার করি যা অলস মূল্যায়ন ব্যবহার করে তবে অলস মূল্যায়নের কোনও সুবিধা আমরা পাই না কারণ তালিকার প্রতিটি উপাদানকে আমাদের দেখতে হবে:

foldr (&&) True [True, True, True, ... False] 
> 0.27 secs

একটি ভাঁজ বামের চেয়ে ডান ভাঁজটি এক্ষেত্রে অনেক ধীর হবে যা অলস মূল্যায়ন ব্যবহার করে না:

foldl' (&&) True [True, True, True, ... False] 
> 0.09 secs

কারণটি হ'ল বামে লেজ পুনরাবৃত্তিগুলির কঠোর ভাঁজ ব্যবহার করে, যার অর্থ এটি রিটার্নের মান সংগ্রহ করে এবং স্মৃতিতে অপারেশনগুলির একটি বৃহত্তর শৃঙ্খলা তৈরি করে না। এটি অলস ভাঁজ ডানদিকের চেয়ে অনেক দ্রুত কারণ উভয় ফাংশনকে যাইহোক পুরো তালিকাটি দেখতে হবে এবং ভাঁজ ডানদিকে লেজ পুনরাবৃত্তি ব্যবহার করতে পারবেন না। সুতরাং, মুল বক্তব্যটি হ'ল হাতের কাজটির জন্য সর্বোত্তম যা ব্যবহার করা উচিত।


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