Funkcionális programozás gyakorlat

Kitlei Róbert

2008/2009 tavaszi félév

Kapcsolat

Követelmények

Négy alapművelet: +, -, *, /

  1. Hány másodperc van egy (365 napos) évben?
  2. Mennyi ideig tartana elszámolni egymillióig?
  3. Add meg a 113. elemét annak a számtani sorozatnak, amelynek az első két eleme 11 és 301.

Hatványozás

A hatványozás jobbra köt, ellentétben a négy elemi művelettel.

  1. Zárójelezd: 4 - 4 ** 4 ** 4 - 4
  2. 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
  1. 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éldaJelentés
[1..100]egész számok egytől százig
[1,3..100]páratlan számok egytől százig
  1. Sorold fel 100-ig a páros természetes számokat.
  2. 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]
  1. Hányféleképpen lehet sorbarendezni 10 különböző elemet?
  2. Mi a több: az univerzumban az atomok száma, vagy 100 elem különböző sorbarendezéseinek a száma?
  3. Hányféleképpen választhatunk ki 6 különböző elemből 3 elemet?
  4. 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      -- 19

Maradékképzés

    97 `mod` 5      -- 2

Az infix módon használt div és mod kötési erőssége ugyanaz, mint a * és / operátoroké.

  1. 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átorKötés
^, ^^, **(.(.))
*, /((.).)
+, -((.).)
==, /=, <, <=, >, >=-
&&(.(.))
||(.(.))
  1. Zárójelezd az alábbi kifejezést:
3 > 2 || 4 == 1 + 2 - 3 * 5
  1. Í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 ]
[ n^2 | n `mod` 2 == 0, n <- [1..] ]

Halmazkifejezés

  1. Állítsd elő a 2 hatványait növekvő sorrendben tartalmazó listát.
  2. Sorold fel az első 10 négyzetszám kétszeresét.
  3. Melyik legkisebb 2 hatvány nagyobb, mint 1020?
  4. Sorold fel a 60 osztóit.
  5. Hány osztója van a 60-nak?
  6. Prímszám-e az 123457?