Funkcionális programozás gyakorlat
Kitlei Róbert
2008/2009 tavaszi félév
Követelmények
- használt nyelv: Haskell
- legalább kéthetente beadandók lesznek
- gyakorlati jegy: a beadandók alapján lesz megállapítva
- kollokvium: a félév végén géptermi zh-val lehet megszerezni
Négy alapművelet: +, -, *, /
- Hány másodperc van egy (365 napos) évben?
- Mennyi ideig tartana elszámolni egymillióig?
- Add meg a 113. elemét annak a számtani sorozatnak, amelynek az első két eleme 11 és 301.
Hatványozás
- Hatványozás nemnegatív kitevővel:
2 ^ 3
- Hatványozás egész kitevővel:
2 ^^ (-3)
- Hatványozás valós kitevővel:
2 ** 0.5
A hatványozás jobbra köt, ellentétben a négy elemi művelettel.
- Zárójelezd: 4 - 4 ** 4 ** 4 - 4
- Számítsd ki az 1.01 sugarú gömb térfogatát.
- a térfogat képlete: 4r3π/3
- π leírása a képletbe: pi
Négyzetgyök: sqrt
Négyzetgyök kettő:
sqrt 2
- Számítsd ki az alábbi másodfokú egyenlet nagyobbik gyökét.
x2-3x=10
Negálás
A negálás (az egyetlen) prefix operátor. A negálás jele, kötési erőssége és kötése megegyezik a kivonáséval.
- 6 - 2
zárójelezése (- 6) - 2
- 6 ^ 2
zárójelezése - (6 ^ 2)
Hibás kifejezés: 3 + -11
. Helyesen: 3 + (-11)
.
Listák: pontpont kifejezések
Példa | Jelentés |
---|
[1..100] | egész számok egytől százig |
[1,3..100] | páratlan számok egytől százig |
- Sorold fel
100
-ig a páros természetes számokat. - Sorold fel
10
-től visszafelé -10
-ig a számokat.
Megjegyzés: ez az elemek felsorolásával is megtehető:
[10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]
Szumma és produktum
sum [1..10]
product [1..10]
- Hányféleképpen lehet sorbarendezni 10 különböző elemet?
- Mi a több: az univerzumban az atomok száma, vagy 100 elem különböző sorbarendezéseinek a száma?
- Hányféleképpen választhatunk ki 6 különböző elemből 3 elemet?
- A 5-ös vagy a 6-os lottón könnyebb a telitalálat?
További műveletek
Maradékos osztás
97 `div` 5
Maradékképzés
97 `mod` 5
Az infix módon használt div
és mod
kötési erőssége ugyanaz, mint a *
és /
operátoroké.
- Döntsd el, hogy a
23
osztja-e az 532253373
-at.
Logikai értékek
Értékek: True
, False
.
Logikai összekötők: &&
, ||
.
Logikai tagadásra példa: not True
.
Összehasonlítások: <
, >
, <=
, >=
, ==
, /=
.
Operátorok kötési erőssége
Operátor | Kötés |
---|
^ , ^^ , ** | (.(.)) |
* , / | ((.).) |
+ , - | ((.).) |
== , /= , < , <= , > , >= | - |
&& | (.(.)) |
|| | (.(.)) |
- Zárójelezd az alábbi kifejezést:
3 > 2 || 4 == 1 + 2 - 3 * 5
- Írj olyan kifejezést, amelynek a végeredményéből világossá válik, hogy (&&) erősebben köt (||)-nál.
Halmazkifejezés
Matematikai példakép: { n^2 | n ∈ N, n páros }
Haskellben:
[ n^2 | n <- [1..], n `mod` 2 == 0 ]
- Tetszőlegesen sok generátor és feltétel.
- A halmazokkal ellentétben az elemekből több is lehet, és számít a sorrend.
- A generátorokkal bevezetett új változók csak a generátortól jobbra láthatóak, tehát a következő hibás:
[ n^2 | n `mod` 2 == 0, n <- [1..] ]
Halmazkifejezés
- Állítsd elő a 2 hatványait növekvő sorrendben tartalmazó listát.
- Sorold fel az első 10 négyzetszám kétszeresét.
- Melyik legkisebb 2 hatvány nagyobb, mint 1020?
- Sorold fel a 60 osztóit.
- Hány osztója van a 60-nak?
- Prímszám-e az 123457?
- az
xs
lista első eleme head xs
- az
xs
lista hossza length xs