রিয়েল ওয়ার্ল্ড হাস্কেল, প্রিন্টের ৪ র্থ অধ্যায়, পৃষ্ঠা 98 জিজ্ঞাসা wordsকরে যে ভাঁজগুলি ব্যবহার করে প্রয়োগ করা যেতে পারে, এবং এটি আমার প্রশ্নও:
এটা কি সম্ভব? তা না হলে কেন? যদি তা হয় তবে কীভাবে?
আমি নিম্নলিখিতটি নিয়ে এসেছি, যা এই ধারণাটির উপর ভিত্তি করে যে প্রতিটি অ-স্থান আউটপুট তালিকার সর্বশেষ শব্দের সাথে যুক্ত করা উচিত (এটি otherwiseপ্রহরীতে ঘটে ), এবং কোনও স্থানটি একটি এমপিপি শব্দ যুক্ত করার জন্য ট্রিগার করে should ইতিমধ্যে যদি না থাকে তবে আউটপুট তালিকা (এটি if- then- এ পরিচালনা করা হয় else)।
myWords :: String -> [String]
myWords = foldr step [[]]
where
step x yss@(y:ys)
| x == ' ' = if y == "" then yss else "":yss
| otherwise = (x:y):ys
স্পষ্টতই এই সমাধানটি ভুল, যেহেতু ইনপুট স্ট্রিংয়ের শীর্ষস্থানীয় স্থানগুলি স্ট্রিংয়ের আউটপুট তালিকার একটি নেতৃস্থানীয় খালি স্ট্রিংয়ের ফলাফল দেয়।
উপরের লিঙ্কে, আমি অন্যান্য পাঠকদের জন্য প্রস্তাবিত বেশ কয়েকটি সমাধান দেখেছি এবং তাদের মধ্যে অনেকগুলি আমার সমাধানের মতোই কাজ করে তবে তারা সাধারণত ভাঁজটির আউটপুট "পোস্ট-প্রসেস" করে থাকে, উদাহরণস্বরূপ tailযদি সেখানে থাকে তবে আইএনএন করে একটি খালি নেতৃস্থানীয় স্ট্রিং।
অন্যান্য পদ্ধতির টিউপলস (আসলে কেবল জোড়া) ব্যবহার করা হয়, যাতে ভাঁজটি জুটির সাথে কাজ করে এবং শীর্ষস্থানীয় / পিছনের স্থানগুলি ভালভাবে পরিচালনা করতে পারে।
এই সমস্ত পদ্ধতির মধ্যে, foldr(বা অন্য ভাঁজ, fww) বাক্সের বাইরে চূড়ান্ত আউটপুট সরবরাহ করে এমন ফাংশন নয়; এর সাথে সবসময় অন্য কিছু হয় আউটপুটটি কোনওভাবে সামঞ্জস্য করতে হয়।
অতএব আমি প্রাথমিক প্রশ্নে ফিরে যাই এবং জিজ্ঞাসা করি wordsযে ভাঁজগুলি ব্যবহার করে (এমনভাবে এটি সঠিকভাবে অনুসরণ / অগ্রণী / পুনরাবৃত্ত স্পেসগুলি পরিচালনা করে) কার্যকর করা সম্ভব কিনা ask দ্বারা ভাঁজ ব্যবহার আমি বলতে চাচ্ছি যে ভাঁজ ফাংশন দূরতম ফাংশন হতে হয়েছে:
myWords :: String -> [String]
myWords input = foldr step seed input