Kurzusok
/
F#
F#
/
Feladatok
/
Kitalálós játék
Kitalálós játék

Kitalálós játék

Tanulófeladat

Bevezetés

Mintaillesztés

Egy if/elif/else kifejezéssel feltételesen hajthatsz végre logikát. Az F#-nak azonban van egy másik, hatékonyabb módja is a feltételes végrehajtásra: a mintaillesztés. A mintaillesztés során egy értéket egy vagy több mintával vethetsz össze. Ilyen minta például a konstans minta, amely egy értéket egy konstanshoz hasonlít (például 1 vagy "hello").

Az F#-ban a mintaillesztés a match kulcsszóval történik:

let describe number =
    match number with
    | 0 -> "Zero"
    | 1 -> "One"

Bár ez más nyelvek switch utasításaira hasonlíthat, a mintaillesztés akkor mutatja meg igazán az erejét, amikor más mintákat is használsz. Ilyen például a változóminta, amellyel egy értéket rögzíthetsz:

match number with
| 0 -> "Zero"
| i -> sprintf "Non zero: %d" i

Bizonyos esetekben további feltételt szeretnél adni egy mintához. Ezt őrszemnek (feltételnek) nevezik, és a when kulcsszóval adhatod hozzá:

match number with
| 0 -> "Zero"
| i when i < 0 -> "Negative number"

A fenti példában nem minden lehetséges bemenethez tartozik illeszkedő minta. A fordító ezt észleli, és figyelmeztetést ír ki. Ezt kimerítő ellenőrzésnek nevezik. A figyelmeztetés megoldásához minden esetet kezelned kell. Erre a wildcard minta használható, amely bármilyen értékre illeszkedik:

match number with
| i when i < 0 -> "Negative number"
| _ -> "Positive number"

// No compiler warning

A mintaillesztés egy értéket fentről lefelé haladva vet össze minden mintával, amíg nem talál egy illeszkedő mintát, és végre nem hajtja a hozzá tartozó logikát. A minták sorrendje számít!

Utasítások

Ebben a feladatban egy barátoddal játszol számkitalálós játékot. A szabályok egyszerűek: titokban választasz egy számot 1 és 100 között, a barátod pedig megpróbálja kitalálni, hogy melyik számot választottad. Hogy segíts a barátodnak, más-más választ adsz attól függően, hogy milyen közel járt a tipp a választott számhoz (42). A különböző válaszok szabályai a következők:

  • Ha a tipp 42: "Correct"
  • Ha a tipp 41 vagy 43: "So close"
  • Ha a tipp kisebb, mint 41: "Too low"
  • Ha a tipp nagyobb, mint 43: "Too high"

Négy részfeladat vár rád, hogy kódold a tippekre adott válaszokat.

1. Helyes tipp megválaszolása

Valósítsd meg a reply függvényt, hogy válaszoljon egy helyes tippre:

reply 42
// => "Correct"

2. Közeli tipp megválaszolása

Alakítsd át a reply függvényt, hogy válaszoljon a közeli tippekre:

reply 41
// => "So close"

3. Túl alacsony tippek megválaszolása

Alakítsd át a reply függvényt, hogy válaszoljon a túl alacsony tippekre:

reply 25
// => "Too low"

4. Túl magas tippek megválaszolása

Alakítsd át a reply függvényt, hogy válaszoljon a túl magas tippekre:

reply 88
// => "Too high"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

Készen állsz elkezdeni a(z) Kitalálós játék 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.