Funkcionális programozás gyakorlat

3. feladatsor

Hasznos linkek

Haskell függvények keresése név vagy típus alapján

Párok

Két, független komponensből állnak.

(1.2, 2.3) :: (Double, Double)
(1, 'a') :: (Int, Char)

Kapcsolódó műveletek:

fst :: (a, b) -> a
snd :: (a, b) -> b

fst (1.2, 2.3) → 1.2
snd (1, 'a') → 'a'

Beadandó feladat

Tekintsük az (a,b) rendezett párt mint egy pontot a koordinátarendszerben. Számítsd ki két pont távolságát.

distance :: (Double, Double) ->
(Double, Double)
-> Double

Példa:

distance (2,-5) (5,-1)      ↦       5.0

A függvényt a beadandókezelő rendszerbe töltsd föl.

Feladat

Állítsd elő azt a listát, ahol az n-edik természetes szám n-szer szerepel:

g123 :: Integer -> [Integer]

Eredménye:

[1,2,2,3,3,3,4,4,4,4, ... n,n,...n]

Extra

Elem duplikálása: képezz egy listából egy másik listát oly módon, hogy az eredeti lista minden elemét kétszer vesszük!

Típus:

dup :: [a] -> [a]

Példa:

[]          ↦       []
[1,7] ↦ [1,1,7,7]
"abc""aabbcc"

Feladat

Képezz n hosszúságú, tetszőleges típusú elemből álló listát!

replicate :: Integer -> a -> [a]

Ez a név is be van már vezetve:

import Prelude hiding (replicate)

Feladat

Állítsd elő a következő, n elemű listát:

[(1,'a'), (2,'b'),...]

Típus:

generatePairs :: Integer -> [(Integer, Char)]

Feladat

Valósítsd meg az fst és a snd függvényt, amelyek visszaadják egy rendezett pár első, illetve második elemét!

fst :: (a, b) -> a
snd :: (a, b) -> b

Ezek szintén előre definiáltak:

import Prelude hiding (fst, snd)

Feladat

Tekintsük az (a,b) rendezett párt mint egy pontot a koordinátarendszerben. Tükrözd a pontot

mirrorX  :: (Int, Int) -> (Int, Int)
mirrorO :: (Int, Int) -> (Int, Int)
mirror :: (Int, Int) -> (Int, Int) -> (Int, Int)

Extra

Definiáld az univerzális kvantort.

all :: (a -> Bool) -> [a]{-véges-} -> Bool
any :: (a -> Bool) -> [a]{-véges-} -> Bool

Ezek szintén előre definiáltak:

import Prelude hiding (all, any)

Extra

Sorold fel a tökéletes számokat.

perfectNumbers :: [Integer]

Az első néhány tökéletes szám:

[6,28,496, ...]

Extra

A p és q prímek ikerprímek, ha q - p == 2. Sorold fel az ikerprímeket. Sorold fel az ikerprímeket.

twinPrimes :: [(Int, Int)]

Extra

Ellenőrizd minden x, y számra n és m között:

x `mod` y  ==  x `rem` y

A függvény típusa az alábbi legyen:

check :: Integer -> Integer -> Bool