Π‘Π²ΡΡΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π»ΡΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π³Π΄Π΅ Π²Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΠ΅ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ ΠΎΠ΄ ΡΠΏΠΈΡΠΊΠ°[8]. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΠΏΠΈΡΠΎΠΊ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΠΌ Π½ΡΠΆΠ½Π° ΡΠ²ΡΡΡΠΊΠ°. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ²ΡΡΡΠΊΠΈ, Π½Π°ΡΡΠ΄Ρ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ map ΠΈ filter, β ΠΎΠ΄Π½ΠΈ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ foldl1 ΠΈ foldr1
Π€ΡΠ½ΠΊΡΠΈΠΈ foldl1 ΠΈ foldr1 ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ foldl ΠΈ foldr, ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ) ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΡΠΎΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈ Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ²ΡΡΡΠΊΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΠΈΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠ½ΠΊΡΠΈΡ maximum ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
maximum' :: (Ord a) => [a] -> a
maximum' = foldl1 max
ΠΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ maximum, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ foldl1. ΠΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ foldl1 ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ²ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΡ, ΡΡΠΎ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, β ΡΡΠΎ Π±ΠΈΠ½Π°ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΉ Π»ΠΈΡΡ! ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ Β«Π³ΠΎΠ»ΠΎΠ²ΡΒ» ΡΠΏΠΈΡΠΊΠ° ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠ΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°, ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΡΡΠ°ΡΠΎΠ΅. ΠΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡ max Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° foldl1, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΡΠΎΠ²Π½ΠΎ ΡΡΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ: Π±Π΅ΡΡΡ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅Π΅. Π ΠΌΠΎΠΌΠ΅Π½ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΡΡΡΠΊΠΈ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ°ΠΌΡΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
ΠΠΎ ΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ΅Π±ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΠΈΠΌΠ΅Π»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎ, Π΅ΡΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΈΡ Ρ ΠΏΡΡΡΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ, ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠ½ΠΊΡΠΈΠΈ foldl ΠΈ foldr Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΡΡΡΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ. ΠΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΡΠΌΡΡΠ» ΡΠ²ΡΡΡΠΊΠ° Π΄Π»Ρ ΠΏΡΡΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° Π΄Π»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ foldl1 ΠΈΠ»ΠΈ foldr1 Π΄Π»Ρ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ²ΡΡΡΠΎΠΊ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΡΠ½Ρ ΡΠ²ΡΡΡΠΊΠΈ, ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΈΡ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠ²ΠΎΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ reverse:
reverse' :: [a] -> [a]
reverse' = foldl (\acc x -> x : acc) []
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΠΏΡΡΡΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°, ΠΈ, ΠΎΠ±Ρ ΠΎΠ΄Ρ Π·Π°ΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅Π²Π°, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² Π½Π°ΡΠ°Π»ΠΎ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΡ \acc x -> x : acc β ΠΏΠΎΡΡΠΈ ΡΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ :, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ reverse' ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠ°ΠΊ:
reverse' :: [a] -> [a]
reverse' = foldl (flip (:)) []
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ product:
product' :: (Num a) => [a] -> a
product' = foldl (*) 1
Π§ΡΠΎΠ±Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ°, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΡΠ°ΡΡ Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΡΠ°Π²Π½ΠΎΠ³ΠΎ 1. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ²ΡΡΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ (*), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° Π½Π° Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ.
ΠΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ filter:
filter' :: (a -> Bool) -> [a] -> [a]
filter' p = foldr (\x acc -> if p x then x : acc else acc) []
ΠΠ΄Π΅ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ. ΠΡ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΎΠΌ p. ΠΡΠ»ΠΈ p x Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΡΠΈΠ½Ρ, ΡΠ»Π΅ΠΌΠ΅Π½Ρ x ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ ΠΎΡΡΠ°ΡΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ last:
last' :: [a] -> a
last' = foldl1 (\ x -> x)
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΠΈΡΠΊΠ° ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ foldr1. ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ Ρ Β«Π³ΠΎΠ»ΠΎΠ²ΡΒ» ΡΠΏΠΈΡΠΊΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ° ΡΠΏΠΈΡΠΊΠ°, Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ β ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ β Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ²ΡΡΡΠΊΠΈ.
ΠΠ½ΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΡΠ²ΡΡΡΠΊΠΈ
ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΈ Π»Π΅Π²ΠΎΠΉ ΡΠ²ΡΡΡΠΊΠΈ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΡΡ ΡΠ²ΡΡΡΠΊΡ Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ f ΠΈ ΡΡΠ°ΡΡΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ z. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΡΡ ΡΠ²ΡΡΡΠΊΡ ΠΊ ΡΠΏΠΈΡΠΊΡ [3,4,5,6], ΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π²ΠΎΡ ΡΡΠΎ:
f 3 (f 4 (f 5 (f 6 z)))
Π€ΡΠ½ΠΊΡΠΈΡ f Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ; ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ Ρ. Π΄. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ f Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π½ΡΠ»Ρ, Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΡΠ°ΠΊ:
3 + (4 + (5 + (6 + 0)))
ΠΠ»ΠΈ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ + ΠΊΠ°ΠΊ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ:
(+) 3 ((+) 4 ((+) 5 ((+) 6 0)))
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π»Π΅Π²Π°Ρ ΡΠ²ΡΡΡΠΊΠ° Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ g ΠΈ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ z ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
g (g (g (g z 3) 4) 5) 6
ΠΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° flip (:) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ [] ΠΊΠ°ΠΊ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ (Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ°), ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ:
flip (:) (flip (:) (flip (:) (flip (:) [] 3) 4) 5) 6
ΠΡΠ»ΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ [6,5,4,3].
Π‘Π²ΡΡΡΠΊΠ° Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²
ΠΠ·Π³Π»ΡΠ΄ Π½Π° ΡΠ²ΡΡΡΠΊΠΈ ΠΊΠ°ΠΊ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΡΠ°Π²Π°Ρ ΡΠ²ΡΡΡΠΊΠ° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ and Ρ ΠΏΠΎΠΌΠΎΡΡΡ foldr, Π° ΠΏΠΎΡΠΎΠΌ Π²ΡΠΏΠΈΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ . Π’ΠΎΠ³Π΄Π° ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π»Π΅Π½ΠΈΠ²ΠΎΡΡΡ ΡΠ·ΡΠΊΠ° Haskell ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ²ΡΡΡΠΊΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ and ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° Bool ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ False, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π²Π΅Π½ False; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ True. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΡΠ°Π²Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ True ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ &&, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Π΅ΡΠ½ΡΡΡ True ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° ΠΈΡΡΠΈΠ½Π½Ρ. Π€ΡΠ½ΠΊΡΠΈΡ && Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ False, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π²Π΅Π½ False, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ ΠΌΡ Π²ΡΡΡΠ΅ΡΠΈΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅ False, ΡΠΎ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ False ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ False, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠ΅Π΄ΠΈ ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΠΎΠ±Π½Π°ΡΡΠΆΠ°ΡΡΡ ΠΈΡΡΠΈΠ½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
and' :: [Bool] -> Bool
and' xs = foldr (&&) True xs
ΠΠ½Π°Ρ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ foldr, ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ and' [True,False,True] Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
True && (False && (True && True))
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ True Π·Π΄Π΅ΡΡ β ΡΡΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ°, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π·ΡΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° [True,False,True]. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ False.
Π ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, repeat False? ΠΡΠ»ΠΈ ΠΌΡ Π²ΡΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π²ΠΎΡ ΡΡΠΎ:
False && (False && (False && (False β¦
ΠΠ΅Π½ΠΈΠ²ΠΎΡΡΡ Haskell ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. Π€ΡΠ½ΠΊΡΠΈΡ && ΡΡΡΡΠΎΠ΅Π½Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ False, ΡΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈ ΡΠ°ΠΊ ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ False.
Π€ΡΠ½ΠΊΡΠΈΡ foldr Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ, Π΅ΡΠ»ΠΈ Π±ΠΈΠ½Π°ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ, Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΅ΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π’Π°ΠΊΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΡ && β Π΅ΠΉ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ² Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ β False.
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π€ΡΠ½ΠΊΡΠΈΠΈ scanl ΠΈ scanr ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° foldl ΠΈ foldr, ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π²ΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° Π² ΡΠΏΠΈΡΠΎΠΊ. Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ scanl1 ΠΈ scanr1, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ foldl1 ΠΈ foldr1.
ghci> scanl (+) 0 [3,5,2,1]
[0,3,8,10,11]
ghci> scanr (+) 0 [3,5,2,1]
[11,8,3,1,0]
ghci> scanl1 (\acc x β> if x > acc then x else acc) [3,4,5,3,7,9,2,1]
[3,4,5,5,7,9,9,9]
ghci> scanl (flip (:)) [] [3,2,1]
[[],[3],[2,3],[1,2,3]]
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ scanl ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ scanr ΠΏΠΎΠΌΠ΅ΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ²ΡΡΡΠΊΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΡΠ²Π΅ΡΠΈΠΌ Π½Π° Π²ΠΎΠΏΡΠΎΡ: ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Π΅ΠΉ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π» Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΡ ΡΡΠΌΠΌΠ° ΠΏΡΠ΅Π²ΡΡΠΈΠ»Π° 1000? Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΌΠΌΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π», Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ map sqrt [1..]. Π’Π΅ΠΏΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΌΠΌΡ, ΠΏΡΠΈΠ±Π΅Π³Π½Π΅ΠΌ ΠΊ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ²ΡΡΡΠΊΠΈ, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠΌΠΌΠ°, Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ scanl1. ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° scanl1 ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ 1000. ΠΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ scanl1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅. ΠΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ 1 ΠΏΠ»ΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ Π΄Π²ΡΡ . Π’ΡΠ΅ΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ β ΡΡΠΎ ΠΊΠΎΡΠ΅Π½Ρ ΡΡΡΡ ΠΏΠ»ΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ x ΡΡΠΌΠΌ ΠΌΠ΅Π½ΡΡΠΈΡ 1000, ΡΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ (x+1) ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π²Π·ΠΎΠΉΡΠΈ 1000.