ट्यूपल बिना नाम की, लेकिन क्रम में रखी वैल्यू का एक अपरिवर्तनीय समूह होता है। ट्यूपल में किसी भी डेटा टाइप की वैल्यू रखी जा सकती है, या एक साथ कई डेटा टाइप की भी। इनमें दूसरे ट्यूपल भी शामिल हो सकते हैं।
ट्यूपल को ( और ) के बीच कॉमा से अलग की गई वैल्यू के रूप में लिखा जाता है: (<element_1>, ... , <element_n>)।
("one", 2) // Tuple pair (2 values)
("one", 2, true) // Tuple triplet (3 values)
सिर्फ एक ही लंबाई और एक ही टाइप (उसी क्रम में) वाले ट्यूपल की ही तुलना की जा सकती है। ट्यूपल में संरचनात्मक समानता होती है, यानी वे सिर्फ तभी बराबर होते हैं जब उनकी सारी वैल्यू बराबर हों।
(1, 2) = (1, 2) // Same length, same types, same values, same order
// => true
(1, 2) = (2, 1) // Same length, same types, same values, different order
// => false
(1, 2) = (1, "2") // Same length, different types
// compiler error
(1, 2) = (1, 2, 3) // Different length
// compiler error
किसी ट्यूपल से वैल्यू निकालने के तीन तरीके हैं:
fst और snd फंक्शनlet person = ("Jordan", 170)
// Option 1: fst/snd
let name1 = fst person
let length2 = snd person
// Option 2: deconstruction
let (name2, length2) = person
// => name2 = "Jordan"
// => length2 = 170
// Option 3: pattern matching
match person with
| name3, length3 -> printf "%s: %d" name3 length3
Azara और Rui साथी हैं, जो समुद्री डाकुओं की थीम वाली खजाने की खोज में एक-दूसरे से मुकाबला कर रहे हैं। एक के पास नक्शे के निर्देशांकों के साथ खजानों की सूची है, और दूसरे के पास नक्शे के निर्देशांकों के साथ स्थानों के नामों की सूची। उन्हें खाली नक्शे भी दिए गए हैं, जिनमें शुरू करने की जगह पर YOU ARE HERE लिखा है।
| Azara की सूची | Rui की सूची | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
लेकिन चीज़ें कुछ बिखरी हुई हैं। Azara के निर्देशांक Rui के निर्देशांकों से अलग ढंग से लिखे और अलग क्रम में लगे हुए लगते हैं। कौन-सा खजाना किस स्थान के साथ जाता है, यह पता करने के लिए उन्हें बार-बार एक सूची से दूसरी सूची देखनी पड़ती है। वे दोनों नए-नए fsharpie हैं, इसलिए अपनी खोज की जानकारी को बेहतर ढंग से व्यवस्थित करने वाला एक छोटा प्रोग्राम (वास्तव में कुछ फंक्शन) लिखने में मदद के लिए वे आपके पास आए हैं।
getCooordinate() फंक्शन बनाइए, जो Azara की सूची से एक (treasure, coordinate) जोड़ी लेता है और सिर्फ नक्शे का निकाला गया निर्देशांक लौटाता है।
getCoordinate ("Scrimshaw Whale's Tooth", "2A")
// "2A"
convertCoordinate() फंक्शन बनाइए, जो "2A" फॉर्मेट का एक निर्देशांक लेता है और (2, 'A') फॉर्मेट का टपल लौटाता है।
convertCoordinate "2A"
// (2, 'A')
compareRecords() फंक्शन बनाइए, जो एक (treasure, coordinate) जोड़ी और एक (location, coordinate, quadrant) रिकॉर्ड लेता है और दोनों के निर्देशांकों की तुलना करता है।
अगर निर्देशांक "मेल खाते" हैं तो true लौटाइए, और अगर नहीं मेल खाते तो false लौटाइए।
सही तुलना के लिए निर्देशांकों का फॉर्मेट ज़रूरत के अनुसार बदल लीजिए।
compareRecords ("Brass Spyglass", "4B") ("Seaside Cottages", (1, 'C'), "blue")
// false
compareRecords ("Model Ship in Large Bottle", "8A") ("Harbor Managers Office", (8, 'A'), "purple")
// true
createrecord() फंक्शन बनाइए, जो Azara की सूची से एक (treasure, coordinate) जोड़ी और Rui की सूची से एक (location, coordinate, quadrant) रिकॉर्ड लेता है, और अगर निर्देशांक मेल खाते हैं तो (coordinate, location, quadrant, treasure) लौटाता है।
अगर निर्देशांक मेल नहीं खाते, तो उसी आकार का टपल लौटाइए, जिसमें हर जगह "" हो।
सही तुलना के लिए निर्देशांकों का फॉर्मेट ज़रूरत के अनुसार बदल लीजिए।
createRecord ("Brass Spyglass", "4B") ("Abandoned Lighthouse", (4, 'B'), "Blue")
// ("4B", "Abandoned Lighthouse", "Blue", "Brass Spyglass")
createRecord ("Brass Spyglass", "4B") ("Seaside Cottages", (1, 'C'), "Blue")
// ("", "", "", "")
Exercism पर साइन अप कीजिए और F# को 18 कॉन्सेप्ट148 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।