আমি কীভাবে আমার হাস্কেলকে যতটা সম্ভব সংক্ষিপ্ত করতে পারি?


12

seasonফাংশন বীজগাণিতিক ফাংশন ব্যবহার করে কিন্তু আমি মনে করি কোডের মত পুনরাবৃত্তিমূলক হয়।

আমি কীভাবে এটি সম্ভব হিসাবে সংক্ষিপ্ত করতে পারি?

data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec
     deriving (Eq,Ord,Show,Read)

data Seasons = Spring | Summer | Autumn | Winter
     deriving (Eq,Ord,Show,Read)

season :: Month -> Seasons
season Jan = Winter
season Feb = Winter
season Mar = Spring
season Apr = Spring
season May = Spring
season June = Summer
season July = Summer
season Aug = Summer
season Sept = Autumn
season Oct = Autumn
season Nov = Autumn
season Dec = Winter

আপনার ফাংশন এবং কনস্ট্রাক্টরগুলিকে একক অক্ষর হিসাবে নামকরণ করা এটির সংক্ষিপ্ত বিবরণ%) কমিয়ে দেবে
লুচি

উত্তর:


20

আপনি রক্ষীদের ব্যবহার করতে পারেন, যেহেতু আপনি Monthএকটি উদাহরণ তৈরি করেছেন Ord:

season :: Month -> Seasons
season m | m <= Feb = Winter
         | m <= May = Spring
         | m <= Aug = Summer
         | m <= Nov = Autumn
         | otherwise = Winter

11

যোগ Enumউভয় আপনার ডাটা টাইপ সংজ্ঞা 'থেকে derivingক্লজ, তারপর

season :: Month -> Seasons
season m  =  toEnum ((fromEnum m - 2) `div` 3 `mod` 4)

একটি মরসুমে তিন মাস, এক বছরে চারটি মরসুম, মার্চ মাসে বসন্ত শুরু হয়।


7

এটি উইল নেসের জবাবের মতো ( Enumউদাহরণের মাধ্যমে মাস সূচকগুলিতে পাটিগণিত করা ) কেবল পঠনযোগ্যতার জন্য কয়েকটি টুইট সহ:

data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept | Oct | Nov | Dec
     deriving (Eq, Ord, Show, Read, Enum)

data Season = Spring | Summer | Autumn | Winter
     deriving (Eq, Ord, Show, Read, Enum)

season :: Month -> Season
season = toEnum . (`div` 3) . monthIndexStartingFrom Mar
    where
    monthIndexStartingFrom :: Month -> Month -> Int
    monthIndexStartingFrom base month = (fromEnum month - fromEnum base) `mod` 12

যাইহোক, আপনার আসল সমাধানটির সমর্থনে কিছু বলা উচিত যা একেবারে সরলতার জন্য সমস্ত ক্ষেত্রে সুস্পষ্টভাবে তালিকাভুক্ত করে। এটি লেখার পুনরাবৃত্তি caseএকাধিক সমীকরণের পরিবর্তে স্টেস্টমেন্ট ব্যবহার করে কিছুটা হ্রাস করা যায় ।


1
আমি এখানে ভোটিং প্যাটার্ন সহ একটি ক্ষতি হয়। :) ওপি সংক্ষিপ্ততম কোডের জন্য জিজ্ঞাসা করে । আচ্ছা ভালো. :)
নেস 19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.