প্রথমত, আমাদের মনোরম সংজ্ঞা রয়েছে
x = 1 : map (2*) x
এটি নিজেই কিছুটা মনোমুগ্ধকর হয় যদি আপনি এটি আগে কখনও না দেখেন। যাইহোক এটি অলসতা এবং পুনরাবৃত্তিগুলির মোটামুটি মানক কৌশল। এখন, আমরা স্পষ্ট পুনরাবৃত্তি fix
এবং পয়েন্ট-ফ্রি-ইফআই ব্যবহার করে মুক্তি পাব।
x = fix (\vs -> 1 : map (2*) vs)
x = fix ((1:) . map (2*))
পরবর্তী কাজটি আমরা যাচ্ছি সেটি হচ্ছে :
বিভাগটি প্রসারিত করা এবং map
অযথা জটিল করে তোলা।
x = fix ((:) 1 . (map . (*) . (*2)) 1)
ঠিক আছে, এখন আমাদের কাছে সেই ধ্রুবকের দুটি অনুলিপি রয়েছে 1
। এটি কখনই করবে না, তাই আমরা পাঠক আবেদনকারীকে এটির নকল করতে ব্যবহার করব। এছাড়াও, ফাংশন রচনাটি কিছুটা আবর্জনা, সুতরাং আসুন (<$>)
আমরা যেখানেই পারি সেখানে এটি প্রতিস্থাপন করুন ।
x = fix (liftA2 (.) (:) (map . (*) . (*2)) 1)
x = fix (((.) <$> (:) <*> (map . (*) . (*2))) 1)
x = fix (((<$>) <$> (:) <*> (map <$> (*) <$> (*2))) 1)
পরবর্তী: এই কলটি map
খুব বেশি পঠনযোগ্য। তবে ভয়ের কিছু নেই: আমরা মনড আইনটিকে আরও প্রসারিত করতে ব্যবহার করতে পারি। বিশেষত fmap f x = x >>= return . f
, তাই
map f x = x >>= return . f
map f x = ((:[]) <$> f) =<< x
আমরা পয়েন্ট-ফ্রি-ইফাই করতে পারি, এর সাথে প্রতিস্থাপন (.)
করতে পারি (<$>)
এবং তারপরে কিছু উত্সাহী বিভাগ যুক্ত করতে পারি:
map = (=<<) . ((:[]) <$>)
map = (=<<) <$> ((:[]) <$>)
map = (<$> ((:[]) <$>)) (=<<)
আমাদের পূর্ববর্তী পদক্ষেপে এই সমীকরণটি প্রতিস্থাপন:
x = fix (((<$>) <$> (:) <*> ((<$> ((:[]) <$>)) (=<<) <$> (*) <$> (*2))) 1)
অবশেষে, আপনি আপনার স্পেসবারটি ভেঙে চমত্কার চূড়ান্ত সমীকরণ তৈরি করেন
x=fix(((<$>)<$>(:)<*>((<$>((:[])<$>))(=<<)<$>(*)<$>(*2)))1)