Kurzusok
/
F#
F#
/
Feladatok
/
Pizzaárazás
Pizzaárazás

Pizzaárazás

Tanulófeladat

Bevezetés

Rekurzió

Rekurziónak nevezzük azt, amikor valami önmagára hivatkozva definiálható. Az F#-ban a rekurzió leggyakrabban rekurzív függvényekben fordul elő, amelyek önmagukat hívják.

Egy rekurzív függvénynek legalább egy alapesettel és legalább egy rekurzív esettel kell rendelkeznie. Az alapeset anélkül ad vissza egy értéket, hogy újra meghívná a függvényt. A rekurzív eset újra meghívja a függvényt, módosítva a bemenetet, hogy az előbb-utóbb megfeleljen az alapesetnek.

A rekurzív függvényeket ugyanúgy definiáljuk, mint a normál függvényeket, de a rec módosítóval. E módosító nélkül egy függvény nem tudja meghívni önmagát, és minden erre irányuló kísérlet fordítási hibát okoz. A rekurziót tehát explicit módon kell engedélyezni.

let rec factorial x =
    // Base case
    if x = 1 then
        1
    // Recursive case
    else
        x * factorial (x - 1)

Az F# a rekurzív típusokat is támogatja, méghozzá megkülönböztetett uniótípusok segítségével. Egy rekurzív megkülönböztetett uniótípus esetében egy vagy több eset adata magára az uniótípusra hivatkozik. A rekurzív függvényekhez hasonlóan a rekurzív típusoknak is legalább egy alapesettel kell rendelkezniük. A rekurzív függvényektől eltérően a rekurzív típusok nem használják a rec kulcsszót.

type RussianDoll =
    | Doll                 // Base case
    | Layer of RussianDoll // Recursive case

Utasítások

Ebben a feladatban egy pizzériában dolgozol, amely házhoz szállít.

Háromféle pizzát kínálsz:

  • Margherita: 7 dollár
  • Caprese: 9 dollár
  • Formaggio: 10 dollár

A vásárlók kis felár ellenében két további lehetőséget is választhatnak:

  1. Extra szósz: 1 dollár
  2. Extra feltét: 2 dollár

Amikor a vásárlók rendelnek, további díjat számítunk fel, ha csak egy vagy két pizzát rendelnek:

  • 1 pizza: 3 dollár
  • 2 pizza: 2 dollár

Három feladatod van, amelyek mindegyike pizzákkal és azok árával foglalkozik.

1. Definiáld a pizzatípusokat és a lehetőségeket

Definiáld a Pizza diszkriminált uniót, amely a pizzatípusokat és a pizzához adható két további lehetőséget reprezentálja:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Számítsd ki egy pizza árát

Valósítsd meg a pizzaPrice függvényt, amely kiszámítja egy pizza árát:

pizzaPrice Caprese
// => 9

3. Számítsd ki egy rendelés árát

Valósítsd meg az orderPrice függvényt, amely kiszámítja egy pizzarendelés árát:

orderPrice [Margherita; Formaggio]
// => 19
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

Készen állsz elkezdeni a(z) Pizzaárazás 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.