Kurzusok
/
F#
F#
/
Feladatok
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

Tanulófeladat

Bevezetés

Listák

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.

Utasítások

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.

1. Hozz létre egy új listát

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
// => []

2. Definiálj egy meglévő listát

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"]

3. Adj hozzá egy új nyelvet egy listához

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"]

4. Számold meg a nyelveket a listán

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

5. Fordítsd meg a listát

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"]

6. Ellenőrizd, hogy izgalmas-e a lista

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:

  • A lista első eleme az F#.
  • A lista második eleme szintén F#, és a listán vagy két, vagy három nyelv szerepel.

Valósítsd meg az excitingList függvényt, amely ellenőrzi, hogy izgalmas-e egy nyelvlista:

excitingList ["Nim"; "F#"]
// => true
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

Készen állsz elkezdeni a(z) Tracks on Tracks on Tracks feladatot?

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.