Difference between revisions of "FP Laboratory 2/cs"
Jump to navigation
Jump to search
(Created page with "* Implementujte funkci, která spočítá nejvetší společný dělitel pro dva zadaná čísla.") |
(Created page with "* Implementujte funkci, která spočítá zda je zadané číslo prvočíslo.") |
||
Line 81: | Line 81: | ||
* Implementujte funkci, která spočítá nejvetší společný dělitel pro dva zadaná čísla. | * Implementujte funkci, která spočítá nejvetší společný dělitel pro dva zadaná čísla. | ||
<syntaxhighlight lang="Haskell">gcd' :: Int -> Int -> Int</syntaxhighlight> | <syntaxhighlight lang="Haskell">gcd' :: Int -> Int -> Int</syntaxhighlight> | ||
− | * | + | * Implementujte funkci, která spočítá zda je zadané číslo prvočíslo. |
<syntaxhighlight lang="Haskell">isPrime :: Int -> Bool</syntaxhighlight> | <syntaxhighlight lang="Haskell">isPrime :: Int -> Bool</syntaxhighlight> |
Revision as of 11:30, 15 September 2020
Types
- V interpretu GHCi lze použít příkaz
:info
k zjištění typu funkce nebo operátoru, zjistěte typ následujících elementů:+, sqrt, succ, max
- Zjistěte informace o typech následujících výrazů a vyhodnoťte je. K tomuto slouží příkaz
:type
. Je možné zapnout, aby interpret standardně vypsal typ výrazu. Toto jde příkazem:set +t
(tuto funkci lze vypnout:unset +t
).
5 + 8
3 * 5 + 8
2 + 4
sqrt 16
succ 6
succ 7
pred 9
pred 8
sin (pi / 2)
truncate pi
round 3.5
round 3.4
floor 3.7
ceiling 3.3
mod 10 3
odd 3
- Na přednáškách byly diskutovány některé základní datové typy:
Int, Double, Bool, Char
. Přiřaďte předcházejícím výrazům nejvhodnější z těchto základních datových typů. Váš tip je možné ověřit využitím operátoru::
. Například, pro první výraz předpokládejme, že jeho výsledný typ jeInt
. Můžeme manuálně přetypovat výsledek na celé číslo a toto ověřit.
Prelude> :type (5 + 8) :: Int
(5 + 8) :: Int :: Int
Pokud provedeme nekorektní konverzi na Char
, dostaneme následující výsledek.
Prelude> :type (5 + 8) :: Char
<interactive>:1:2: error:
* No instance for (Num Char) arising from a use of `+'
* In the expression: (5 + 8) :: Char
Pro tento výraz je platná konverze také na typ Double
.
Prelude> :type (5 + 8) :: Double
(5 + 8) :: Double :: Double
Reasoning about types
Pro následující výrazy se pokuste určit:
- zda je výraz typově korektní;
- jaký bude typ výsledku;
- jaký bude výsledek;
- zadejte výraz do interpretu a ověřte vaše tvrzení.
5.9/7
(floor 5.9)/7
floor 5.9/7
fromIntegral floor 5.9/7
fromIntegral (floor 5.9)/7
div (floor 5.9) 7
(floor 5.9) div 7
(floor 5.9) `div` 7
mod 10/2 3
mod (floor (10/2)) 3
Jednoduché funkce
Implementujte následující funkce:
- Funkce která spočítá faktoriál zadaného čísla.
factorial :: Int -> Int
- Funkce která spočítá n-tý člen ve Fibonacciho sekvenci.
fib :: Int -> Int
- Funkce která ověří, že zadaný rok je přestupný (rok je přestupný když je dělitelný 4 a zároveň není dělitelný 100. Pokud je dělitelný 400, je to přestupný rok).
leapYear :: Int -> Bool
- Implementujte dvě funkce, které vrátí maximální hodnotu ze dvou respektive tří čísel. Ty budou zadány jako parametry.
max2 :: Int -> Int -> Int
max3 :: Int -> Int -> Int -> Int
- Výraz kombinace znamená výběr položek z kolekce, kde (narozdíl od permutace) pořadí prvku při výběru nehraje roli. Spočítejte počet možných kombinací, pokud vybíráme k prvků z kolekce n prvků.
combinations :: Int -> Int -> Int
- implementujte funkci, která spočítá počet řešení kvadratické rovnice. Tato kvadratická rovnice je zadaná standardními koeficienty: a,b,c.
numberOfRoots :: Int -> Int -> Int -> Int
-- To simplify the solution, let construct can be used
f x y = let a = x + y
in a * a
- Implementujte funkci, která spočítá nejvetší společný dělitel pro dva zadaná čísla.
gcd' :: Int -> Int -> Int
- Implementujte funkci, která spočítá zda je zadané číslo prvočíslo.
isPrime :: Int -> Bool