হাস্কেল, 48
f=(!!)(sequence=<<(tail$iterate(['A'..'Z']:)[]))
কম গল্ফড:
f n = (concatMap sequence $ tail $ iterate (['A'..'Z'] :) []) !! n
ব্যাখ্যা
হাস্কেলের সংযুক্তকারী sequence
ক্রিয়াগুলির একটি তালিকা গ্রহণ করে এবং সেগুলি সম্পাদন করে, প্রতিটি ক্রিয়াকলাপের ফলাফলকে তালিকায় ফিরিয়ে দেয়। উদাহরণ স্বরূপ:
sequence [getChar, getChar, getChar]
সমান:
do
a <- getChar
b <- getChar
c <- getChar
return [a,b,c]
হাসকেলে ক্রিয়াগুলি মানগুলির মতো আচরণ করা হয় এবং >>=
(বাইন্ড) এবং return
আদিম ব্যবহার করে একসাথে আঠালো করা হয় । কোনও মোনাড উদাহরণ থাকার পরে যদি এই অপারেটরগুলি প্রয়োগ করে তবে কোনও ধরণের একটি "ক্রিয়া" হতে পারে ।
ঘটনাচক্রে, তালিকার ধরণটিতে একটি ম্যানড উদাহরণ রয়েছে। উদাহরণ স্বরূপ:
do
a <- [1,2,3]
b <- [4,5,6]
return (a,b)
এটি সমান [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
। কীভাবে তালিকার বোধগম্যতা লক্ষণীয়ভাবে অনুরূপ: লক্ষ্য করুন
[(a,b) | a <- [1,2,3], b <- [4,5,6]]
যেহেতু তালিকাগুলি এক ধরণের "ক্রিয়া", তাই আমরা sequence
তালিকা সহ ব্যবহার করতে পারি । উপরোক্ত হিসাবে প্রকাশ করা যেতে পারে:
sequence [[1,2,3],[4,5,6]]
সুতরাং, sequence
আমাদের বিনামূল্যে সংমিশ্রণ দেয়!
সুতরাং, তালিকা তৈরি করতে:
["A","B"..."Z","AA","AB"]
পাস করার জন্য আমার কেবল তালিকা তৈরি করা দরকার sequence
[['A'..'Z'],['A'..'Z','A'..'Z'],...]
তারপরে তালিকাগুলিতে concatMap
প্রয়োগ করুন sequence
এবং ফলস্বরূপ তালিকাগুলি একত্রিত করুন। কাকতালীয়ভাবে, concatMap
হয় =<<
, তাই তালিকা একসংখ্যা আমাকে একটা কয়েকটি অক্ষর এখানে খুব শেভ দেয় তালিকার জন্য ফাংশন।