Kezdőoldal » Számítástechnika » Programozás » Hogyan lehetne kivitelezni...

Hogyan lehetne kivitelezni ezt a feladatot? (Haskell)

Figyelt kérdés

Ami konkrétan nem megy benne az az, hogy hogyan lehet Haskell-ben két számot függvényben összehasonlítani



Egy játékbolt kiárusítást tart a következő módon: azokat a játékokat, amelyekből 10-nél kevesebb van a készleten és az áruk nagyobb, mint 500 20%-kal leárazzák. A játékok nevét, árát és darabszámát egy (név, ár, db) formájú (Fractional a, Ord a, Integral b) => (String, a, b) rendezett hármas fogja reprezentálni.


Írj egy toysOnSale függvényt, amely egy listában visszaadja a leárazott játékokat árukkal együtt és a darabszám nélkül!


Az alábbi tesztesetek közül mindegyiknek True-t kell adnia:


toysOnSale [("labda",200.0, 5),("Barbie", 800.0, 15),

("Kisauto", 600.0, 9)] == [("Kisauto",480.0)]

toysOnSale [("Zold kisauto", 500, 1), ("Piros kisauto", 501, 1)]

== [("Piros kisauto",400.8)]

toysOnSale [("Zold kisauto", 1000, 9),

("Piros kisauto", 1000, 10)] == [("Zold kisauto",800.0)]

toysOnSale [] == []



2022. márc. 26. 22:26
 1/5 anonim ***** válasza:
100%
Csak érdeklődésként: hol tanítanak Haskellt?
2022. márc. 27. 00:07
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

A feladat az alábbi témaköröket fedi le:


- filter függvény,

- lambda-jelölés

- lambda-jelölés adattípusokra (jelen esetben rendezett n-esekre).


Például ha egy listában testhőmérsékletek vannak, akkor


filter (\temperature -> temperature > 37) [36, 36.7, 36.9, 38, 37.9, 36.3]


adja a lázas hőmérsékletek listáját:

[38.0, 37.9]



Ha a listában összetett adatszerkezetek vannak, vagyis itt rendezett hármasok, akkor a lambda-kifejezést meg lehet írni közvetlenül is ilyen mintaillesztéses alakban:


Például, ha a listában betegek szerepelnek névvel és testhőmérséklettel, akkor


filter (\(name, temperature) -> temperature > 37) [("Joe", 36), ("Eve", 36.7), ("Xenia", 36.9), ("Pete", 38), ("Lily", 37.9), ("Lucy", 36.3)]


megmutatja a lázas betegeket (teljes rekordjaikkal), itt jelen esetben

[("Pete", 38.0), ("Lily", 37.9)]


Ősszetett feltétetek is fölépíthetőek a filter lambda-kifejezésében:


filter (\(name, age, temperature) -> temperature > 37 && age < 30) [("Joe", 15, 36), ("Eve", 40, 36.7), ("Xenia", 5, 36.9), ("Pete", 22, 38), ("Lily", 55, 37.9), ("Lucy", 73, 36.3)]


ez például a lázas fiatalok adatait szűri le, íme az eredemény:

[("Pete", 22, 38.0)]

2022. márc. 27. 05:57
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Majd ha a szűrés megvan jól, akkor a feladat része még az is, hogy az eredmény a megfelelő alakú legyen (vagyis itt jelen esetben az, hogy csak az első két adat szerepeljen).


Listaelemek elemenként való átalakítására a map függvény alkalmas.


A map függvény is magaabbrendű függvény, vagyis a lambda-kifejezések itt is jól hasznosíthatóak.


Például:


map (\(name, age, temperature) -> (age, temperature)) [("Joe", 15, 36), ("Eve", 40, 36.7), ("Xenia", 5, 36.9), ("Pete", 22, 38), ("Lily", 55, 37.9), ("Lucy", 73, 36.3)]


ez anonimizálja a betegadatokat (vagyis lehagyja a nevet):

[(15, 36.0), (40, 36.7), (5, 36.9), (22, 38.0), (55, 37.9), (73, 36.3)]


A minták, mintaillesztések esetében a ,,nem használt'' paraméternevek ,,jokerezhetőek'':


map (\(_, age, temperature) -> (age, temperature)) [("Joe", 15, 36), ("Eve", 40, 36.7), ("Xenia", 5, 36.9), ("Pete", 22, 38), ("Lily", 55, 37.9), ("Lucy", 73, 36.3)]


itt a name lett kijokerezve, hiszen nincs kihasználva, ezért elég a name helyett _ jelet írni

2022. márc. 27. 06:05
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

Vagyis a feladatnál lesz egy összetett filter, hogy szűrjön árra és darabszámra


és lesz egy szintén összetett map, amely két fajta átalakítást csinál: leszállítja az árat és elhagyja a darabszámot

2022. márc. 27. 06:06
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
ELTE pl.
2022. márc. 27. 08:33

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!