Funkcioná lis prográmozá s Aszódi Józs
Funkcion?lis progr?moz?s
Asz?di J?zsef
Start
Ez a jegyzet a tud?som ?s a szerint k?sz?lt, elfordulhatnak benne hib?k, de igyekszem meg?rtetni.
Elsnek ?rdemes elolvasni, kis le?r?s a Haskell programnyelvrl:
Tov?bbiakban haszn?lom m?g ezeket: Haskell honlapja, ahonnan a GHCi is let?lthet: Haskell le?r?sok (data, types stb..): Haskell le?r?sok (functions, operators stb..):
Ez pedig m?g a zh-n is haszn?lhat?:
A meg?rt?shez fontos haszn?lni a honlapokat is, mert an?lk?l hi?nyoss?gok lehetnek (p?ld?ul a z?r?jelez?srl kezdetben m?g nem ?rok).
Az elej?tl fogva ?rdemes minden feladatot kipr?b?lni, kielemezni ?s ?rtelmezni, hiszen k?sbbiekben ezekre ?p?l a t?bbi. A feladatok megold?sai is szerepelnek itt (persze nem minden), de csak ?tmutat?nak, nem megold?snak..
1
Funkcion?lis progr?moz?s
Sz?mok
Asz?di J?zsef
Oszt?s
K?tf?le oszt?s van. Az egyik Fractional a-val (/) t?r vissza, a m?sik pedig Integral a-val (div).
(/)
Fractional a jelent?se: a kicser?lhet a Rational, Double, ... t?pusokra.
P?lda
1 / 3
0.3333333333333333 :: Double
(div)
Integral a jelent?se: a kicser?lhet az Int, Integer, ... t?pusokra.
P?lda
53 `div` 5
ak?r ?gy is fel?rhat?: ,,div 53 5"
10 :: Integer
vagyis 53-ban az 5 10-szer van meg.
Marad?k
53 `mod` 5 3 :: Integer
ak?r ?gy is fel?rhat?: ,,mod 53 5" vagyis 53 osztva 5-tel 3 marad?kot ad.
Feladatok
K?r?lbel?l h?ny m?sodperc van egy ?vben? 365 * 24 * 60 * 60
31536000 :: Integer
1.01 sug?r? g?mb t?rfog?t?? 4 * 1.01^3 * pi / 3
4.315714736781623 :: Double
23 osztja-e a 532253373-at? mod 532253373 23 == 0
True :: Bool
2
Funkcion?lis progr?moz?s
Asz?di J?zsef
Konverzi?k
Le?r?s
?ltal?nos esetben k?t k?l?nb?z t?pussal nem lehet dolgozni. Egy Double-t m?g ?sszehasonl?tani sem lehet egy Float-tal. Erre vannak az ?n. konverzi?k, amelyekkel az effajta t?pusk?l?nbs?gek kik?sz?b?lhetek. Ezek csak azon t?pusokra haszn?lhat?ak, amelyek az ?rtelmez?si tartom?nyaikban szerepelnek, de az ?rt?kk?szletben l?v t?pus?k?nt haszn?lhat?ak.
Unik?d
R?szletek a List?n?l (String-n?l)
fromIntegral
?rtelmez?si tartom?ny: Int vagy Integer ?rt?kk?szlet: Int, Integer, Rational, Float, Double
realToFrac
?rtelmez?si tartom?ny: Int, Integer, Rational, Float vagy Double ?rt?kk?szlet: Rational, Float, Double
H?szn?l?t
(5 :: Int) == (5 :: Integer) => Nem lehet ?sszehasonl?tani, mert a t?pusuk k?l?nb?zik (egyik Int, a m?sik Integer) De fromIntegral (5 :: Int) == fromIntegral (5 :: Integer) == True :: Bool ?gy m?r lehet mveleteket v?gezni k?t k?l?nb?z sz?mmal. Ez szint?n igaz a realToFrac-ra is, amely t?bb t?pusra haszn?lhat?.
Kerek?t?sek
truncate truncate :: (Integral b, RealFrac a) => a -> b Nulla fel? es eg?sz sz?mra kerek?t. truncate 1.001 == truncate 1.999 == 1 :: Integer truncate (-1.999) == truncate (-1.001) == -1 :: Integer
round round :: (Integral b, RealFrac a) => a -> b Legk?zelebbi eg?sz sz?mhoz kerek?t. round 0.001 == round 0.500 == 0 :: Integer round 0.501 == round 1.499 == 1 :: Integer round (-0.501) == round (-1.499) == -1 :: Integer
Megj.: 0.5 ?> 0; 1.5 ?> 2; 2.5 ?> 2; 3.5 ?> 4; 4.5 ?> 4; 5.5 ?> 6; 6.5 ?> 6; 7.5 ?> 8; 8.5 ?> 8; 9.5 ?> 10
ceiling ceiling :: (Integral b, RealFrac a) => a -> b Felfel? kerek?t. floor 1.001 == floor 1.999 == 2 :: Integer floor (-1.001) == floor (-1.999) == (-1) :: Integer
floor floor :: (Integral b, RealFrac a) => a -> b Lefel? kerek?t. floor 1 == floor 1.999 == 1 :: Integer floor (-1.001) == floor (-1.999) == (-2) :: Integer
3
Funkcion?lis progr?moz?s
Asz?di J?zsef
M?gy?r?z?t Mint l?that?, a round x.5 eset?n mindig a p?ros sz?mhoz kerek?t. Ennek az ?sszegz?sn?l van szerepe: Vegy?k a [0.5, 1.5 .. 100.5] list?t, amelynek az ?sszege: sum [0.5, 1.5 .. 100.5] == 5100.5 :: Double Ha felfel? kerek?ten?nk (ceiling), akkor ez 5151 lenne, lefel? kerek?t?s (floor) eset?n pedig 5050. A round-n?l ez az ?sszeg 5100.
Feladatok
10^9 gy?k?hez legk?zelebb es eg?sz sz?m? round (sqrt 10 ^ 9)
Mi az unik?d k?dj? az `x' karakternek? fromEnum `x'
Melyik az 50 unik?d k?d? karakter? (toEnum 50 :: Char)
31623 :: Integer 120 :: Int `2' :: Char
4
Funkcion?lis progr?moz?s
Asz?di J?zsef
Bool
Kisebb (), kisebb egyenl (=), egyenl (==), nem egyenl (/=) ?s a neg?l?s (not). Szintaktik?ban az a == b helyes, de az a == b == c m?r nem, csak z?r?jelezve, (a==b)==c, ahol c True vagy False.
Mveletek
(&&) True && True == True False && True== False
(||) True || True == True False || True== True
True && False == False False && False == False
True || False == True False || False == False
Feladatok
Kifejez?s, amely pontosan akkor True ha a 23 nem osztja a 532253373-at!
div 532253373 23 /= 0 vagy
not (div 532253373 23 == 0)
?rjuk ki a rejtett z?r?jeleket! 6 < 4 || 4 >= 5 && 12 /= 4 * 4
=>
(((6 < 4) || (4 >= 5)) && (12 /= (4 * 4)))
T?vol?tsunk el min?l t?bb z?r?jelp?rt! ((1 < 2) && (50 > (100 - 2) `mod` 50)) =>
1 < 2 && 50 > (100 - 2) `mod` 50
Z?r?jelezz?k a k?vetkez kifejez?st!
2 < div 18 4 || mod 15 5 > (-3)
=>
((2 < (div 18 4)) || ((mod 15 5) > (-3)))
5
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related download
- learning haskell
- haddock a haskell documentation tool github pages
- from haskell the craft of functional programming 3rd ed
- single precision floating point format
- the fun of programming yale university
- gpgpu programming in haskell with accelerate
- haskell tutorial
- ieee visweek tutorial 2008 lexical syntax haskell
- basic haskell cheat sheet declaring types and classes
- haskell unit 3 floating point numbers and characters