Halmazkifejezések

Halmazkifejezések

Matematikai példakép: { n2 | n ∈ N, n páros }

Haskellben:

Test>
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400, 484, 576, 676, 784, 900, 1024, 1156, 1296, 1444, 1600, 1764, 1936, 2116, 2304, 2500, 2704, 2916, 3136, 3364, 3600, 3844, 4096, 4356, 4624, 4900, 5184, 5476, 5776, 6084, 6400, 6724, 7056, 7396, 7744, 8100, 8464, 8836, 9216, 9604, 10000, 10404, 10816, 11236, 11664, 12100, 12544, 12996, 13456, 13924, 14400, 14884, 15376, 15876, 16384, 16900, 17424, 17956, 18496, 19044, 19600, 20164, 20736, 21316, 21904, 22500, 23104, 23716, 24336, 24964, 25600, 26244, 26896, 27556, 28224, 28900, 29584, 30276, 30976, 31684, 32400, 33124, 33856, 34596, 35344, 36100, 36864, …, ……] :: [Integer]

Test>
<interactive>:1:14: error: Variable not in scope: n :: Integer

Feladat: A 2 hatványai [*]

Állítsuk elő a 2 hatványait növekvő sorrendben 1-től 210-ig!

Solution>

Feladat: Az első 10 négyzetszám kétszerese

Soroljuk fel az első 10 négyzetszám kétszeresét!

Solution>

Feladat: False és True felváltva

Állítsunk elő olyan 10 hosszúságú listát, amely váltakozva tartalmazza a False és True értékeket!

Solution>

Feladat: Nagy 2 hatvány keresés [*]

Melyik legkisebb 2 hatvány nagyobb, mint 1020?

Solution>

Megjegyzés: l !! 0 == head l.

Feladat: 1024 > 1000, …

Melyik legkisebb n természetes számra igaz: 1024n > 2 * 1000n?

Solution>

Feladat: 60 osztói

Soroljuk fel a 60 osztóit!

Solution>

Feladat: 60 osztóinak száma

Hány osztója van a 60-nak?

Solution>

Feladat: Prímvizsgálat [*]

Prímszám-e az 123457?

Solution>

Párok

A rendezett párok elemei lehetnek különböző típusúak:

Test>
(True, 'a') :: (Bool, Char)

Halmazkifejezés, amely párokat tartalmazó listát állít elő:

Test>
[('a', 1), ('a', 2), ('b', 1), ('b', 2), ('c', 1), ('c', 2)] :: [(Char, Integer)]

Feladat: Órák és percek

Állítsuk elő azt a listát, amely sorrendben tartalmazza az összes (óra, perc) párt!

Solution>

Feladat: Dominók [*]

Állítsuk elő azt a listát, amely párként tartalmazza az összes dominót: [(0,0),(0,1),...,(0,9),(1,1),...,(9,9)]!

A (1,0) ne szerepeljen, mert az ugyanazt a dominót reprezentálja, mint a (0,1).

Megjegyzés: A dominók legkevesebb nulla, legtöbb kilenc pontot tartalmazhatnak.

Solution>

Feladat: ÉS és VAGY kötési erőssége

Keressünk olyan a, b, c logikai értékeket, melyekre teljesül a következő logikai feltétel:

(a || (b && c)) /= ((a || b) && c)
Solution>

Feladat: Hónapok és napok [*]

Állítsuk elő azt a listát, amely sorrendben tartalmazza az összes (hónap, nap) párt egy 365 napos évben!

Solution>

Segítség: Használjuk az elem függvényt!

Cipzározás

Két listát az zip függvénnyel cipzározhatunk össze:

zip :: [a] -> [b] -> [(a, b)]
Test>
[('a', 1), ('b', 2)] :: [(Char, Integer)]

Megjegyzés: Ha valamelyik lista elfogy, a cipzározás véget ér.

Feladat: Sorszámozás [*]

Állítsuk elő az [(1,'a'),(2,'b'),(,'z')] listát!

Solution>

Feladatok végtelen listákkal

Végtelen listák megnézésekor használjuk a take függvényt:

take :: Int -> [a] -> [a]
Test>
[1, 3, 5, 7, 9, 11] :: [Integer]

Mi a különbség?

Test>
Test>

Mi lesz ez?

Test>

Feladat: Az összes természetes számpár

Soroljuk fel a természetes számpárokat: [(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),]!

Solution>

Feladat: 1, 2, 2, 3, 3, 3, … [*]

Állítsuk elő a következő listát: [1,2,2,3,3,3,4,4,4,4,] ! Az i szám i-szer szerepel a listában.

Solution>

Feladat: 1, 2, 1, 2, 3, 2, 1, … [*]

Próbáljuk ki a concat függvényt!

Test>
concat :: Foldable t => t [a] -> [a]

Állítsuk elő az 1,2,1,2,3,2,1,2,3,4,3,2,1,2,3,4,5,4,3,2,1,2,3,4,5,6,5,4,3,2,1,.. sorozatot!

Solution>

Feladat: Csillagok [*]

Próbáljuk ki az unwords függvényt!

Test>
unwords :: [String] -> String

Állítsuk elő a következő végtelen szöveget: "* ** *** **** *****… !

Solution>

Feladat: Négyzetszámok elhagyása

Állítsuk elő azt a listát, amelyet úgy kapunk, hogy a természetes számokból elhagyjuk a négyzetszámokat!

Solution>

Feladat: 1,1,2,1,2,3,1,2,3,4,…

Állítsuk elő az [1,1,2,1,2,3,1,2,3,4,] listát!

Solution>

Feladat: 0,1,0,-1,0,1,2,1,0,-1,-2,-1,0,1,2,3,2,1,0,-1,…

Állítsuk elő a következő sorozatot: 0,1,0,-1,0,1,2,1,0,-1,-2,-1,0,1,2,3,2,1,0,-1, … !

Solution>

Feladat: A π közelítése Leibniz-féle sorral

Írjunk olyan kifejezést, amely megadja π közelítő értékét a Leibniz-féle sor részleges előállításával! A képlet a következő:

Comprehensionsa5abf50a72f584c30655f4e0f2cb7762.png

Természetesen ezt mi csak közelítjük, így elég az első ezer elem összegét venni, majd az eredményt néggyel megszorozni.

Solution>

Segítség: Először érdemes az [1, -3, 5, -7, 9, -11, ... ] végtelen listát előállítani. Majd vegyük ezen elemek reciprokát és adjuk ezeket össze!

Feladat: Számtani sorozatok keresése

Tekintsük a következő egyenleteket:

Comprehensions7ec75333755c6eea9c9b50ed035e82fe.png

Az egyenletek bal oldalán olyan számtani sorozatok szerepelnek, amelyek összege egyenlő a sorozat első és utolsó elemének szorzatával.

Állítsuk elő az összes ilyen sorozatot, az utolsó elem nagysága szerint növekvő sorrendben!

Az ellenőrzéshez csak az első 6 sorozatot írjuk be.

Solution>

Segítség: Használhatjuk a List modulban található init és tails függvényeket.