Hogyan kell elkezdeni ezt a haskell feladatot ?
Add meg a relation konstanst, amely a 0 és 100 intervallumból vett összes egész számokhoz hozzárendeli az $$x \mapsto x^5 - 5x^4 + 2x^3 - 3x + 4$$ hozzárendelési szabály szerinti értéket!
Az eredmény egy rendezett párokat tartalmazó lista, ahol a pár első eleme a pozitív szám, a második elem az ehhez a számhoz rendelt érték.
-- take 5 relation == [(0,4),(1,-1),(2,-34),(3,-113),(4,-136)]
-- elem (0,4) relation == True
-- elem (1,-1) relation == True
-- elem (7,5471) relation == True
-- not (elem (1,0) relation) == True
Nem teljesen éretem a feladatot. Megpróbáltam elkezdeni megadni a konatanst , de már itt elakadtam.
relation $$x \mapsto x^5 - 5x^4 + 2x^3 - 3x + 4$$
egy halmazkifejezéssel elég könnyen meg lehet oldani
ennek általános alakja: [ f elem | elem <- elemek, feltétel elem ]
ez egy listát fog előállítani úgy, hogy egyesével veszi az összes "elem"-et az "elemek"-ből, és ha teljesül erre az "elem"-re a "feltétel", akkor alkalmazza "elem"-re az "f" műveletet, és bekerül az eredménylistába
egy példa:
az "elemek" legyen egy lista, amiben 1-től 5-ig vannak a számok, ezeket fogjuk egyesével venni, a "feltétel" pedig legyen az, hogy a szám nagyobb, mint 2, és az "f" művelet legyen az, hogy vesszük a szám háromszorosát
ez így fog kinézni:
[ 3 * n | n <- [1..5], n > 2]
ha ezt kiértékeled, akkor az eredménye [9, 12, 15] lesz értelemszerűen
visszatérve a feladathoz, konkréten ugyanezt kell csinálni, sőt itt még feltételt sem kell megadni
a típusát még leírom:
relation :: [(Int, Int)]
relation = undefined
Ezt a listás dolgot ezt értem, ahogy leírtad, viszont akkor ennek : $$x \mapsto x^5 - 5x^4 + 2x^3 - 3x + 4$$ hol van a helye a listában ?
relation::[(Int, Int)]
relation [elem \mapsto x^5 - 5x^4 + 2x^3 - 3x + 4$$ | [elem <- [0..100]]
Itt azt a hibát írja ki : error: parse error on input `^'
Eddig sikerült megoldani, de arra nem jöttem rá, hogy az elem rész az hova kellene.
relation :: (Int, Int)
relation =[x^5 - 5*x^4 + 2*x^3 - 3*x + 4 | x <- [1..100]]
amit te írtál annak [Int] lesz a típusa, 1-től 100-ig minden számhoz hozzárendeli az "x^5 - 5*x^4 + 2*x^3 - 3*x + 4" kifejezést, és ezeket teszi bele a listába
viszont neked "relation :: [(Int, Int)]" típus kell, szóval nem Int-et, hanem (Int, Int)-et kell előállítani (vagyis az "x^5 - 5*x^4 + 2*x^3 - 3*x + 4"-t írd át úgy, hogy egy (Int, Int) pár legyen)
A legegyszerűbb, de kissé ömlesztett megoldás:
relation :: [(Int, Int)]
relation = [(x, x^5 - 5*x^4 + 2*x^3 - 3*x + 4) | x <- [0..100] ]
Úgy kell elképzelni, hogy a | jel mögött „legenerálódnak” az x értékei, és az | jel előtti formába lesznek öntve az értékek.
Valójában persze emögött egy pontosabban leírt folyamat áll (list comprehension, amelyet majd később meg fogtok tudni fogalmazni a lista adatszerkezet műveleteivel is). Mindenesetre a dolog eredeti ihletője a matematikából ismert „set comprehension” jelölés:
az itt felsorolt példákból épp az utolsóra hasonlít.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!