Kezdőoldal » Számítástechnika » Programozás » Hogyan kell elkezdeni ezt a...

Hogyan kell elkezdeni ezt a haskell feladatot ?

Figyelt kérdés

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$$



2021. okt. 7. 14:00
 1/6 anonim ***** válasza:

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

2021. okt. 7. 20:14
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

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 `^'

2021. okt. 7. 23:09
 3/6 A kérdező kommentje:

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

2021. okt. 8. 01:50
 4/6 anonim ***** válasza:

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)

2021. okt. 8. 06:21
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
vagy ugyanezt meg lehet csinálni map függvénnyel
2021. okt. 8. 16:52
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

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:


[link]


az itt felsorolt példákból épp az utolsóra hasonlít.

2021. okt. 23. 06:51
Hasznos számodra ez a válasz?

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!