Funkcionális programozás gyakorlat

2. gyakorlat

Programozási környezet

Modul készítése: egyszerű szövegszerkesztővel


-- teszt.hs tartalma
f x = x + x

Programozási környezet

Utasítások a GHCi környezetnek

ParancsUtasításAngolul
:l Modulnévmodul betöltéseload
:rmodul újratöltésreload
:t függvénynévfüggvény típusatype
:s +sidőmérés bekapcsolásaset
:s +tminden kifejezés típusaset

A ++ operátor

Listák összefűzése: ++

[1,2] ++ [3,4,5]        ↦       [1,2,3,4,5]
  1. Készítsd el a következő listát legyártó függvényt.
[1, 2, ...,n-1, n, n-1, ..., 2, 1]

A típusa a következő legyen:

mountain :: Integer -> [Integer]

Az Integer a tetszőleges egész számok típusa.

Feladatok

  1. Add meg az 1, 2, ..., n számok négyzetösszegét.
sumTo :: Integer -> Integer
  1. (nehéz) Négyzetgyökvonás egészekre.
iSqrt :: Integer -> Integer
-- valójában ennél bonyolultabb a típusa

Felhasználható: round, fromIntegral

Feladatok

MűveletJelentés
nullüres-e a lista?
orvan a listában true?
anda lista minden eleme true?
  1. Döntsd el egy számról, hogy négyzetszám-e.
isSquare :: Integer -> Bool

Lista hossza

length [10..15]         ↦       6
  1. Számold meg, hány négyzetszám van n és m között!
countSquaresInInterval :: Integer -> Integer -> Int

Az Int a 32 biten ábrázolt egész számok típusa.

Lista hossza

Kétargumentumos függvény infix alkalmazása: a `f` b. Saját függvényre is működik.

  1. Definiáld a két szám oszthatóságát megadó logikai függvényt.
divides :: Integer -> Integer -> Bool

Feladatok

  1. Definiálj olyan logikai függvényeket, amelyek eldöntik egy számról, hogy az páros-e illetve páratlan-e.
even :: Integer -> Bool
odd :: Integer -> Bool

Az even és az odd előre definiáltak.

import Prelude hiding (odd, even)

Feladatok

  1. Állapítsd meg egy évről, hogy szökőév-e.
isLeapYear :: Integer -> Bool
  1. Definiálj olyan függvényt, amely egy listába előállítja egy szám osztóit.
divisors :: Integer -> [Integer]
  1. Definiálj olyan függvényt, amely egy listába előállítja egy szám valódi osztóit.
properDivisors :: Integer -> [Integer]

Feladatok

  1. Definiálj olyan logikai függvényt, amely eldönti egy számról, hogy prím-e.
isPrime :: Integer -> Bool
  1. Definiáld a prímek listáját.
primes :: [Integer]
  1. Definiálj olyan függvényt, amely megadja egy számhoz az utána következő legkisebb prímszámot.
followingPrime :: Integer -> Integer
  1. Képezz n hosszú, csupa nullából álló listát.
zeroes :: Integer -> [Integer]

Karakter

Karakter leírása: 'c'.

Speciális karakterekre: '\n', '\t', '\\' stb.

  1. Képezz n hosszú, megadott karakterekből álló listát.
replicateChar :: Integer -> Char -> [Char]
  1. Képezz n hosszú, megadott elemekből álló listát. Az elem típusa tetszőleges, ezt a típusleírásban szereplő a jelzi.
replicate :: Integer -> a -> [a]

Beadandó feladat

Definiáld az arePrimesBetween függvényt, amely megállapítja, hogy van-e prím két szám között.

arePrimesBetween :: Integer -> Integer -> Bool

Példák:

arePrimesBetween 8 10       ↦       false
arePrimesBetween 8 16 ↦ true

A megoldást tartalmazó forrásfájlt az e-mail címemre küldd el.

A levél tárgysora a következő legyen: 1. feladat.