F# में list शून्य या अधिक वैल्यू का एक अपरिवर्तनीय संग्रह है। किसी ऐरे की सभी वैल्यू का टाइप एक ही होना चाहिए। चूँकि ऐरे अपरिवर्तनीय होते हैं, इसलिए एक बार बन जाने के बाद उनकी वैल्यू कभी नहीं बदल सकती। जो भी फंक्शन या ऑपरेटर ऐरे को बदलते हुए दिखते हैं (जैसे कोई एलिमेंट जोड़ना), वे वास्तव में एक नया ऐरे लौटाते हैं।
ऐरे को इस तरह बनाया जा सकता है:
let empty = []
let singleValue = [5]
let threeValues = ["a"; "b"; "c"]
किसी ऐरे में एलिमेंट जोड़ने का सबसे आम तरीका :: (cons) ऑपरेटर है:
let twoToFour = [2; 3; 4]
let oneToFour = 1 :: twoToFour
// => [1; 2; 3; 4]
F# के ऐरे का एक हेड (पहला एलिमेंट) और एक टेल (पहले एलिमेंट के बाद का सब कुछ) होता है। किसी ऐरे का टेल खुद भी एक ऐरे होता है।
ऐरे के साथ काम करने के लिए या तो List मॉड्यूल में बने फंक्शन और ऑपरेटर इस्तेमाल किए जाते हैं, या फिर लिस्ट और कॉन्स पैटर्न की मदद से पैटर्न मैचिंग की जाती है:
let describe list =
match list with
| [] -> "Empty list"
| head::tail -> sprintf "Non-empty list with head: %d" head
describe [] // => "Empty list"
describe [1] // => "Non-empty with head: 1"
describe [5; 7; 9] // => "Non-empty with head: 5"
पैटर्न मैचिंग करते समय आप किसी वैल्यू को छोड़ भी सकते हैं; जब किसी खास केस में आपको किसी वैल्यू की परवाह नहीं होती (यानी आप उस वैल्यू का इस्तेमाल नहीं करने वाले होते), तो इस बात को जताने के लिए आप अंडरस्कोर ('_') लगा सकते हैं:
let describe list =
match list with
| [] -> "Empty list"
| [x] -> "List with one item"
| [_; y] -> "List with two items (first item ignored)"
| _ -> "List with many items (all items ignored)"
describe [] // => "Empty list"
describe [1] // => "List with one item"
describe [5; 7] // => "List with two items (first item ignored)"
describe [5; 7; 9] // => "List with many items (all items ignored)"
पैटर्न मैचिंग में अकेला '_' हमेशा सबसे अंत में आना चाहिए; जो भी वैल्यू बाकी किसी भी केस से मेल नहीं खाती, उसे यही केस संभाल लेता है।
इस अभ्यास में आप कोड लिखेंगे। इस कोड की मदद से आप उन प्रोग्रामिंग भाषाओं का हिसाब रख सकेंगे जिन्हें आप Exercism पर सीखना चाहते हैं।
आपके सामने छह टास्क हैं, और इन सभी में ऐरे से काम पड़ेगा।
आप जिन भाषाओं को सीखना चाहते हैं, उनका हिसाब रखने के लिए आपको एक नया ऐरे बनाना होगा। ऐसी newList बाइंडिंग बनाइए जिसमें एक नया, खाली ऐरे हो।
newList
// => []
इस समय आपके पास एक कागज़ का टुकड़ा है, जिस पर वे भाषाएँ लिखी हैं जो आप सीखना चाहते हैं: F#, Clojure और Haskell। इस ऐरे को दर्शाने के लिए existingList बाइंडिंग बनाइए।
existingList
// => ["F#"; "Clojure"; "Haskell"]
जैसे-जैसे आप Exercism पर घूमते हैं और नई रोचक भाषाएँ ढूँढते हैं, आप उन्हें अपने ऐरे में जोड़ना चाहते हैं। अपने ऐरे के शुरू में एक नई भाषा जोड़ने के लिए addLanguage फंक्शन बनाइए।
addLanguage "TypeScript" ["JavaScript"; "CoffeeScript"]
// => ["TypeScript"; "JavaScript"; "CoffeeScript"]
भाषाओं को एक-एक करके गिनना सुविधाजनक नहीं है। अपने ऐरे में भाषाओं की संख्या गिनने के लिए countLanguages फंक्शन बनाइए।
countLanguages ["C#"; "Racket"; "Rust"; "Ruby"]
// => 4
किसी समय आपको पता चलता है कि आपका ऐरे वास्तव में उलटे क्रम में है! अपने ऐरे को उलटने के लिए reverseList फंक्शन बनाइए।
reverseList ["Prolog"; "C"; "Idris"; "Assembly"]
// => ["Assembly"; "Idris"; "C"; "Prolog"]
आपको सभी भाषाएँ पसंद हैं, लेकिन F# का स्थान आपके दिल में खास है। इसलिए भाषाओं का कोई ऐरे आपके लिए रोमांचक तब होता है, जब:
भाषाओं का ऐरे रोमांचक है या नहीं, यह जाँचने के लिए excitingList फंक्शन बनाइए:
excitingList ["Nim"; "F#"]
// => true
Exercism पर साइन अप कीजिए और F# को 18 कॉन्सेप्ट148 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।