Elm के टाइप में समानता ऑपरेटर (==) से जाँच की जा सकती है कि वे "एक जैसे" हैं।
असमानता ऑपरेटर (/=) है (नहीं कि कई भाषाओं की तरह !=)।
समानता ऑपरेटर लिटरल, टपल, रिकॉर्ड और कस्टम टाइप पर काम करता है।
1 == 2
--> False
1 /= 2
--> True
(1, 2) == (2, 1)
--> False
type alias MyRecord = { myInt : Int, myStrings : List String }
a : MyRecord
a = MyRecord (1 + 1) ["hello world"]
type alias MyOtherRecord = { myInt : Int, myStrings : List String }
myStrings = (String.join " " ["hello", "world"]) :: []
b : MyOtherRecord
b = { myInt = 2, myStrings = myStrings}
a == b
--> True
ध्यान दें कि आपको फंक्शन की तुलना कभी नहीं करनी चाहिए, क्योंकि इससे प्रोग्राम रनटाइम पर क्रैश हो जाएगा।
तुलना ऑपरेटर (<), (<=), (>), (>=) और फंक्शन min, max, compare comparable टाइप पर काम करते हैं।
comparable टाइप एक विशेष टाइप है जो उन सभी बिल्ट-इन टाइप को एक साथ रखता है जिनकी तुलना की जा सकती है: संख्याएँ, अक्षर, स्ट्रिंग, comparable चीज़ों के ऐरे, और comparable चीज़ों के टपल।
1 < 1 + 1
--> True
'x' < 'X'
--> False
"abc" < "abz"
--> True
"abc" < "abcd"
--> True
"abc" < "b"
--> True
min [1 , 2, 9000] [10]
--> [1 , 2, 9000]
min (1, "hello") (3, "bye")
--> (1, "hello")
रिकॉर्ड या कस्टम टाइप जैसे अन्य टाइप की वैल्यू की सीधे तुलना नहीं की जा सकती।
कुछ बिल्ट-इन टाइप के लिए ज़रूरी है कि उनका कंटेंट comparable हो, जैसे Set या Dict की कीज़, क्योंकि उनकी संरचना एक आंतरिक क्रम पर निर्भर करती है।
comparable वैल्यू वाले ऐरे को List.sort से क्रमबद्ध किया जा सकता है, और ऐसी वैल्यू वाले ऐरे जिन्हें comparable वैल्यू में मैप किया जा सकता है, उन्हें List.sortBy से क्रमबद्ध किया जा सकता है।
अगर आपको एक के बाद एक कई आधारों पर क्रम लगाना है (पहले एक प्रॉपर्टी से, और बराबरी होने पर दूसरी से), तो टपल या ऐरे का इस्तेमाल List.sortBy के साथ भी किया जा सकता है, क्योंकि टपल और ऐरे लेक्सिकोग्राफिक क्रम में क्रमबद्ध होते हैं।
List.sort ["hi", "hello", "bye", "goodbye"]
--> ["bye", "goodbye", "hello", "hi"]
List.sortBy String.length ["hi", "hello", "bye", "goodbye"]
--> ["hi", "bye", "hello", "goodbye"]
-- sort by length, then alphabetically
List.sortBy (\str -> (String.length str, str)) ["hi", "mum", "hello", "sis", "bye", "dad"]
--> ["hi", "bye", "dad", "mum", "sis", "hello"]
फंक्शन compare दो comparable वैल्यू लेता है और एक Order लौटाता है।
एक Order एक ऐसा टाइप है जो एक ही ऑपरेशन में जाँचता है कि कोई वैल्यू दूसरी से बड़ी (GT), बराबर (EQ) या छोटी (LT) है या नहीं।
compare 1 2
--> LT
compare "" ""
--> EQ
compare [12] []
--> GT
तुलना फंक्शन किसी भी टाइप के लिए बनाए जा सकते हैं और उनका उपयोग, उदाहरण के लिए, List.sortWith से क्रमबद्ध करने के लिए किया जा सकता है:
type Color = Red | Green | Blue
compareColors : Color -> Color -> Order
compareColors a b =
case (a, b) of
(Red, Red) -> EQ
(Red, _) -> LT
(_, Red) -> GT
(Green, Green) -> EQ
(Green, _) -> LT
(_, Green) -> GT
(Blue, Blue) -> EQ
List.sortWith compareColors [Blue, Red, Green, Green, Blue]
--> [Red, Green, Green, Blue, Blue]
अचानक आपको पुरानी यादों का झोंका आता है और अपने पुराने Blorkemon™️ कार्ड निकालने का ज़ोरदार मन करता है।
Blorkemon™️ कार्ड एक बहुत बढ़िया, पुराने ज़माने का कार्ड ट्रेडिंग गेम है।
हर Card पर एक Blorkemon™️ मॉन्स्टर बना होता है, उसके साथ हमले की शक्ति का लेवल भी होता है, और अगर आप भाग्यशाली हैं तो कार्ड शाइनी भी हो सकता है।
हर अगला Blorkemon™️ कार्ड पिछले से ज़्यादा शक्तिशाली लगता है, लेकिन बेहतर होगा कि आप जाँच लें।
isMorePowerful फंक्शन बनाइए। अगर उसके पहले आर्गुमेंट वाला कार्ड दूसरे से निश्चित रूप से ज़्यादा शक्तिशाली है तो इसे True लौटाना चाहिए, वरना False.
newthree = Card "Newthree" 120 False
scientuna = Card "Scientuna" 6 True
isMorePowerful newthree scientuna
--> True
हाथ में ढेरों Blorkemon™️ कार्ड होने पर आप सबसे विनाशकारी हमले की तैयारी कर सकते हैं।
maxPower फंक्शन बनाइए, जो दो कार्डो में से सबसे ज़्यादा शक्ति लेवल लौटाता है।
maxPower newthree scientuna
--> 120
आपको ऐसा याद पड़ता है कि आपके पास हर Blorkemon™️ का कम से कम एक कार्ड था, लेकिन पिछली बार जाँचे हुए काफी समय हो गया है। इसलिए अपने कार्डो को क्रम में लगाइए ताकि उनकी Pulpapedia पर दी गई आधिकारिक सूची से तुलना कर सकें।
sortByMonsterName फंक्शन बनाइए, जो Cards की एक ऐरे लेता है और मॉन्स्टर के नामों से क्रम में लगी ऐरे लौटाता है।
sortByMonsterName [newthree, scientuna]
--> [Card "Newthree" 120 False, Card "Scientuna" 6 True]
Blorkemon™️ दुनिया की सबसे कूल चीज़ हैं। आप यह शब्द हल्के में नहीं कह रहे हैं; आपके पास इसे साबित करने का एक वैज्ञानिक तरीका है।
sortByCoolness फंक्शन बनाइए, जो कार्डो की ऐरे को क्रम में लगाता है और सबसे कूल कार्डो को सबसे पहले रखता है।
किसी कार्ड की कूलनेस सबसे पहले उसकी शाइनिनेस से तय होती है: सभी शाइनी कार्ड बाकी सबसे कहीं ज़्यादा कूल होते हैं।
दूसरा कारक शक्ति लेवल है, जो जितना ज़्यादा हो उतना बेहतर।
sortByCoolness [newthree, scientuna]
--> [Card "Scientuna" 6 True, Card "Newthree" 120 False]
शाइनिनेस सिर्फ दिखावे के लिए नहीं है; बराबर शक्ति वाले Blorkemon™️ की लड़ाई में शाइनी वाला हमेशा जीतता है। इसे शाइनी पावर कहते हैं।
compareShinyPower फंक्शन बनाइए, जो इसी गुण को एक नियम का रूप देता है।
दो कार्डो का Order उनके शक्ति लेवल से तय होता है अगर वे अलग हैं, लेकिन अगर बराबर हैं तो शाइनी कार्ड बड़ा माना जाएगा।
compareShinyPower newthree scientuna
--> GT
Blorkemon™️ कार्ड के खेल में कुछ भी हो सकता है, लेकिन फिर भी ज़्यादा शक्तिशाली कार्ड के जीतने की प्रवृत्ति रहती है।
expectedWinner फंक्शन बनाइए, जो उस मॉन्स्टर का नाम लौटाता है जिसके जीतने की सबसे ज़्यादा संभावना है, जैसा कि compareShinyPower के क्रम से तय होता है।
फंक्शन को अपेक्षित विजेता का मॉन्स्टर नाम लौटाना चाहिए, या अगर दोनों प्रतिद्वंद्वियों की शाइनी पावर बराबर है तो "too close to call" लौटाना चाहिए।
expectedWinner newthree scientuna
--> "Newthree"
Exercism पर साइन अप कीजिए और Elm को 28 कॉन्सेप्ट110 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।