হাসকেলে ছোট সরঞ্জামগুলি লেখার আমার কিছু অভিজ্ঞতা আছে এবং আমি এটি ব্যবহার করতে খুব স্বজ্ঞাত বলে মনে করি, বিশেষত ফিল্টারগুলি লেখার জন্য (ব্যবহার করে interact
) যা তাদের স্ট্যান্ডার্ড ইনপুট প্রসেস করে এবং এটি স্ট্যান্ডার্ড আউটপুটে পাইপ করে।
সম্প্রতি আমি এমন একটি ফিল্টার ব্যবহার করার চেষ্টা করেছি যা স্বাভাবিকের চেয়ে প্রায় 10 গুণ বড় এবং আমি একটি Stack space overflow
ত্রুটি পেয়েছি ।
কিছু পঠন করার পরে (যেমন এখানে এবং এখানে ) আমি স্ট্যাক স্পেস সংরক্ষণ করার জন্য দুটি গাইডলাইন সনাক্ত করেছি (অভিজ্ঞ হাসকলার্স, আমি যদি সঠিক কিছু না লিখি তবে দয়া করে আমাকে সংশোধন করুন):
- পুচ্ছ-পুনরাবৃত্তি না করে এমন পুনরাবৃত্তির ফাংশন কলগুলি এড়িয়ে চলুন (এটি টেল-কল অপ্টিমাইজেশান সমর্থন করে এমন সমস্ত কার্যকরী ভাষার জন্য বৈধ)।
seq
উপ-এক্সপ্রেশনগুলির প্রাথমিক মূল্যায়নকে বাধ্য করার জন্য পরিচয় করিয়ে দিন যাতে ভাবগুলি হ্রাস হওয়ার আগে খুব বেশি বৃদ্ধি না পায় (এটি হাস্কেলের জন্য নির্দিষ্ট, বা কমপক্ষে অলস মূল্যায়ন ব্যবহার করে ভাষাগুলিতে)।
seq
আমার কোডে পাঁচ বা ছয়টি কল প্রবর্তন করার পরে আমার সরঞ্জামটি আবার সুচারুভাবে চলতে চলেছে (বৃহত্তর ডেটাতেও)। তবে, আমি দেখতে পাই যে মূল কোডটি কিছুটা বেশি পঠনযোগ্য ছিল।
যেহেতু আমি একজন অভিজ্ঞ হাস্কেল প্রোগ্রামার নই আমি জিজ্ঞাসা করতে চেয়েছিলাম যে seq
এইভাবে প্রবর্তন করা একটি সাধারণ অনুশীলন, এবং সাধারণত সাধারণত কতবার seq
হাস্কেল প্রোডাকশন কোডটিতে দেখা যায়। বা এমন কোনও কৌশল রয়েছে যা seq
খুব বেশি সময় ব্যবহার এড়াতে দেয় এবং এখনও সামান্য স্ট্যাক স্পেস ব্যবহার করতে পারে ?