Az F#-ban a list egy nulla vagy több értékből álló, módosíthatatlan gyűjtemény. A listában minden értéknek ugyanolyan típusúnak kell lennie. Mivel a listák módosíthatatlanok, miután létrehoztál egy listát, annak értéke soha nem változhat meg. Minden olyan függvény és operátor, amely úgy tűnik, hogy módosítja a listát (például elemet ad hozzá), valójában új listát ad vissza.
A listákat a következőképpen definiálhatod:
let empty = []
let singleValue = [5]
let threeValues = ["a"; "b"; "c"]
A leggyakoribb módja annak, hogy elemet adj egy listához, a :: (cons) operátoron keresztül történik:
let twoToFour = [2; 3; 4]
let oneToFour = 1 :: twoToFour
// => [1; 2; 3; 4]
Az F#-listának van egy feje (az első elem) és egy farka (minden, ami az első elem után következik). A lista farka maga is egy lista.
A listákat vagy a List modulban definiált függvényekkel és operátorokkal kezelheted, vagy kézzel, mintaillesztéssel, a lista és cons minták használatával:
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"
Mintaillesztéskor egy értéket el is dobhatsz; ha egy adott esetben nem érdekel egy érték (azaz nem fogod használni), egy alulvonással ('_') jelezheted ezt:
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)"
Az egyetlen '_' mintaillesztéskor mindig utolsóként szerepeljen; minden értéket, amely nem illeszkedik a többi eset egyikéhez sem, ez az eset fog kezelni.
Ebben a feladatban olyan kódot írsz, amellyel listát vezethetsz azokról a programozási nyelvekről, amelyeket meg szeretnél tanulni az Exercism-ön.
Hat részfeladat vár rád, és mindegyikben listákkal fogsz foglalkozni.
Ahhoz, hogy nyilván tudd tartani azokat a nyelveket, amelyeket meg szeretnél tanulni, létre kell hoznod egy új listát. Definiáld a newList kötést, amely egy új, üres listát tartalmaz.
newList
// => []
Jelenleg van egy papírlapod, amelyen azok a nyelvek szerepelnek, amelyeket meg szeretnél tanulni: F#, Clojure és Haskell. Definiáld az existingList kötést, amely ezt a listát reprezentálja.
existingList
// => ["F#"; "Clojure"; "Haskell"]
Ahogy felfedezed az Exercism-öt, és egyre érdekesebb nyelvekre bukkansz, szeretnéd őket felvenni a listádra. Valósítsd meg az addLanguage függvényt, amely egy új nyelvet szúr be a listád elejére.
addLanguage "TypeScript" ["JavaScript"; "CoffeeScript"]
// => ["TypeScript"; "JavaScript"; "CoffeeScript"]
Kényelmetlen egyenként megszámolni a nyelveket. Valósítsd meg a countLanguages függvényt, amely megszámolja, hány nyelv van a listádon.
countLanguages ["C#"; "Racket"; "Rust"; "Ruby"]
// => 4
Egyszer csak rájössz, hogy a listád valójában visszafelé van rendezve! Valósítsd meg a reverseList függvényt, amely megfordítja a listádat.
reverseList ["Prolog"; "C"; "Idris"; "Assembly"]
// => ["Assembly"; "Idris"; "C"; "Prolog"]
Bár minden nyelvet szeretsz, az F# különleges helyet foglal el a szívedben. Ezért igazán izgalmasnak tartasz egy nyelvlistát, ha:
Valósítsd meg az excitingList függvényt, amely ellenőrzi, hogy izgalmas-e egy nyelvlista:
excitingList ["Nim"; "F#"]
// => true
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) F# nyelvet 18 fogalom148 feladat segítségével, valódi emberi mentorálással, mindez ingyen.