quicksort :: (Ord a) => [a] β> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort (filter (<= x) xs)
biggerSorted = quicksort (filter (> x) xs)
in smallerSorted ++ [x] ++ biggerSorted
ΠΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ map ΠΈ filter
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΉΠ΄ΡΠΌ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ 100 000, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° ΡΠΈΡΠ»ΠΎ 3829 Π±Π΅Π· ΠΎΡΡΠ°ΡΠΊΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΡΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ , ΠΊΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
largestDivisible :: Integer
largestDivisible = head (filter p [100000,99999..])
where p x = x `mod` 3829 == 0
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠΈΡΠ΅Π» ΠΌΠ΅Π½ΡΡΠΈΡ 100 000 Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠ±ΡΠ²Π°Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π»ΠΈ ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΠ»Π° ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π² ΡΠ±ΡΠ²Π°ΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΠΈΠ· Π½ΠΈΡ , ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ, Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°. ΠΠ°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. Π‘Π½ΠΎΠ²Π° Β«Π»Π΅Π½Ρ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈΒ»! ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Β«Π³ΠΎΠ»ΠΎΠ²ΡΒ» ΡΠΏΠΈΡΠΊΠ°, Π½Π°ΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ΅Π½ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ»ΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ΅Π½. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π½Π°ΠΉΡΠΈ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ Π½Π΅ΡΡΡΠ½ΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΌΠ΅Π½ΡΡΠΈΡ 10 000. ΠΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ takeWhile: ΠΎΠ½Π° ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΠΈ ΡΠΏΠΈΡΠΎΠΊ, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΎΠ±Ρ ΠΎΠ΄ ΡΠΏΠΈΡΠΊΠ° Ρ Π΅Π³ΠΎ Β«Π³ΠΎΠ»ΠΎΠ²ΡΒ», Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΠ΅ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ, ΠΎΠ±Ρ ΠΎΠ΄ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΡΡΡΠΎΠΊΠΈ "ΡΠ»ΠΎΠ½Ρ ΡΠΌΠ΅ΡΡ Π²Π΅ΡΠ΅Π»ΠΈΡΡΡΡ", ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ Π²ΡΠ·ΠΎΠ²: takeWhile (/=' ') "ΡΠ»ΠΎΠ½Ρ ΡΠΌΠ΅ΡΡ Π²Π΅ΡΠ΅Π»ΠΈΡΡΡΡ", ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½ΡΠ»Π° Π±Ρ "ΡΠ»ΠΎΠ½Ρ".
ΠΡΠ°ΠΊ, Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π°ΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ (^2) ΠΊ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ [1..]. ΠΠ°ΡΠ΅ΠΌ ΠΎΡΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ, ΡΡΠΎΠ±Ρ Π² Π½ΡΠΌ Π±ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΡΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΠ°Π»Π΅Π΅ Π²ΠΎΠ·ΡΠΌΡΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΌΠ΅Π½ΡΡΠΈΠ΅ 10000. Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΠΌΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°. ΠΠ°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² GHCi:
ghci> sum (takeWhile (<10000) (filter odd (map (^2) [1..])))
166650
ΠΠΎΡΡΡΡΠ°ΡΡΠ΅! ΠΡ Π½Π°ΡΠ°Π»ΠΈ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π») ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈ ΠΊ Π½ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π»ΠΈ, ΠΏΡΠΎΡΠ΅ΠΆΠΈΠ²Π°Π»ΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΠ» Π½Π°ΡΠΈΠΌ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠΏΠΈΡΠΊΠΎΠ² Π΄Π»Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π»ΠΈ:
ghci> sum (takeWhile (<10000) [m | m <β [n^2 | n <β [1..]], odd m])
166650
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ ΡΡΠ΄Π°ΠΌΠΈ ΠΠΎΠ»Π»Π°ΡΡΠ°. ΠΠ΅ΡΡΠΌ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΡΡΡΠ½ΠΎΠ΅, Π΄Π΅Π»ΠΈΠΌ Π΅Π³ΠΎ Π½Π° Π΄Π²Π°. ΠΡΠ»ΠΈ Π½Π΅ΡΡΡΠ½ΠΎΠ΅ β ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° 3 ΠΈ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΠ΅ΡΡΠΌ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ Π²ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΈ Ρ. Π΄. Π ΡΡΡΠ½ΠΎΡΡΠΈ, Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΠΈΡΠ΅Π». Π‘ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΡ Π½ΠΈ Π½Π°ΡΠ°Π»ΠΈ, ΡΠ΅ΠΏΠΎΡΠΊΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ΅. ΠΡΠ»ΠΈ Π±Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ»ΠΎ 13, ΠΌΡ Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΊΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. ΠΡΡ ΠΏΠΎ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΉ ΡΡ Π΅ΠΌΠ΅: 13 Γ 3 + 1 ΡΠ°Π²Π½ΡΠ΅ΡΡΡ 40; 40, ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π½Π° 2, ΡΠ°Π²Π½ΠΎ 20, ΠΈ Ρ. Π΄. ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ 10 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΠΈΡΡ: Π΅ΡΠ»ΠΈ Π²Π·ΡΡΡ Π²ΡΠ΅ ΡΡΠ°ΡΡΠΎΠ²ΡΠ΅ ΡΠΈΡΠ»Π° ΠΎΡ 1 Π΄ΠΎ 100, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈΠΌΠ΅ΡΡ Π΄Π»ΠΈΠ½Ρ Π±ΠΎΠ»ΡΡΠ΅ 15? ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ:
chain :: Integer -> [Integer]
chain 1 = [1]
chain n
| even n = n:chain (n `div` 2)
| odd n = n:chain (n*3 + 1)
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠΎΡΠΊΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ΅, ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ. ΠΠΎΠ»ΡΡΠΈΠ»Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ-ΡΠ°ΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
ghci> chain 10
[10,5,16,8,4,2,1]
ghci> chain 1
[1]
ghci> chain 30
[30,15,46,23,70,35,106,53,160,80,40,20,10,5,16,8,4,2,1]
Π’Π°ΠΊ! ΠΡΠΎΠ΄Π΅ Π±Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡ Π° ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ²Π΅ΡΠΈΡ Π½Π° Π½Π°Ρ Π²ΠΎΠΏΡΠΎΡ:
numLongChains :: Int
numLongChains = length (filter isLong (map chain [1..100]))
where isLong xs = length xs > 15
ΠΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ chain ΠΊ ΡΠΏΠΈΡΠΊΡ [1..100], ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ; ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ. ΠΠ°ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΄Π»ΠΈΠ½Ρ ΡΠ΅ΠΏΠΎΡΠΊΠΈ. ΠΠΎΡΠ»Π΅ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π»ΠΎΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅.
ΠΠ ΠΠΠΠ§ΠΠΠΠ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ numLongChains :: Int, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ length Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Int Π²ΠΌΠ΅ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° Num β ΡΠ°ΠΊ ΡΠΆ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²Π΅ΡΠ½ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΉ ΡΠΈΠΏ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Num, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ fromIntegral ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ½Π½ΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ length.
Π€ΡΠ½ΠΊΡΠΈΡ map Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ map, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠ΅ ΡΡΡΠΊΠΈ: map (*) [0..] β Π΅ΡΠ»ΠΈ Π½Π΅ Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π»ΠΈ, ΡΠΎ Ρ ΠΎΡΡ Π±Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠ΅) β ΡΡΠΎ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ Π² ΡΠΏΠΈΡΠΊΠΈ (Π½ΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊ). ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈ ΠΊ ΡΠΏΠΈΡΠΊΠ°ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π²ΡΠΎΠ΄Π΅ map (*2) [0..], ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠ° (Num a) => [a], Π½ΠΎ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΡΠΏΠ΅Ρ ΠΎΠΌ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (*) [0..] Π±Π΅Π·ΠΎ Π²ΡΡΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΈΡΠ»Π° Π² ΡΠΏΠΈΡΠΊΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ *, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠΉ (Num a) => a β> a β> a. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π²ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΈΠΌΠ΅Π½ΠΈΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ * ΠΊ ΡΠΏΠΈΡΠΊΡ [0..], ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ (Num a) => [a β> a]. Π‘ΠΏΠΈΡΠΎΠΊ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ map (*) [0..], ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π·Π°ΠΏΠΈΡΠ°Π² [(0*),(1*),(2*),(3*),(4*),(5*)β¦
ghci> let listOfFuns = map (*) [0..]
ghci> (listOfFuns !! 4) 5
20
ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΠ΅ΡΡΡΠ΅ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΠ΅ β (4*). ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 5 ΠΊ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ (4*) 5 ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ 4 * 5.
ΠΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½ΡΠΆΠ½Π° Π½Π°ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ: ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΈΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ» \ (Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠΈΠΉ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΎΡΠ΅Π½ΡΠΊΠΎ Π½Π°ΠΏΡΡΡΡ Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π³ΡΠ΅ΡΠ΅ΡΠΊΡΡ Π±ΡΠΊΠ²Ρ Π»ΡΠΌΠ±Π΄Π° β Ξ»), Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ. ΠΠ°Π»Π΅Π΅ ΠΏΠΈΡΠ΅ΠΌ Π·Π½Π°ΠΊ β> ΠΈ ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΌΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π»ΡΠΌΠ±Π΄Ρ Π² ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ, ΠΈΠ½Π°ΡΠ΅ ΠΎΠ½Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ Π²ΠΏΡΠ°Π²ΠΎ.
ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ isLong Π² ΡΠ΅ΠΊΡΠΈΠΈ where ΡΡΠ½ΠΊΡΠΈΠΈ numLongChains ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Ρ Π² ΡΠΈΠ»ΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
numLongChains :: Int
numLongChains = length (filter (\xs β> length xs > 15) (map chain [1..100]))
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ ΡΠ°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (\xs β> length xs > 15) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ, Π±ΠΎΠ»ΡΡΠ΅ Π»ΠΈ 15 Π΄Π»ΠΈΠ½Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°.
Π’Π΅, ΠΊΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΌ, Π³Π΄Π΅ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ map (+3) [1,6,3,2] ΠΈ map (\x β> x + 3) [1,6,3,2] ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ (+3) ΠΈ (\x β> x + 3) β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠΎΠΉΠΊΡ ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ·Π»ΠΈΡΠ½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠΏΡΠ°Π²Π΄Π°Π½Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΡΠ΅ ΡΠΈΡΠ°Π΅ΡΡΡ.
ΠΠ°ΠΊ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
ghci> zipWith (\a b β> (a * 30 + 3) / b) [5,4,3,2,1] [1,2,3,4,5]
[153.0,61.5,31.0,15.75,6.6]
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ±ΡΠ°Π·ΡΠΎΠΌ Π² Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ . ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π·ΡΠΎΠ² Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΠ°Π·ΡΡ [] ΠΈ (x: xs) ΠΈ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΡ ΠΊ ΠΎΠ±ΡΠ°Π·ΡΡ (x:xs) Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ Ρ []. ΠΡΠ»ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ±ΡΠ°Π·ΡΠΎΠΌ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠΎΡΡΠΎΡΠΎΠΆΠ½Π΅Π΅ Ρ ΡΡΠΈΠΌ!
ghci> map (\(a,b) β> a + b) [(1,2),(3,5),(6,3),(2,6),(2,5)]
[3,8,9,8,7]
ΠΠ±ΡΡΠ½ΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π½ΡΠ»ΠΎ Π²ΡΡ ΡΡΡΠΎΠΊΡ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ Π΄Π΅ΡΠ°Π»Ρ: ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π΄Π²Π΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ.
addThree :: Int -> Int -> Int -> Int