ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠΊΠΎΠ»Π΅ Π΅ΡΡΡ ΡΠΊΠ°ΡΡΠΈΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ΅Π½ΠΈΠΊΠ°ΠΌ Π±ΡΠ»ΠΎ ΠΊΡΠ΄Π° ΠΊΠ»Π΅ΠΈΡΡ ΠΏΠΎΡΡΠ΅ΡΡ GunsβnβRoses. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ°ΡΡΠΈΠΊ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ. ΠΡΠ»ΠΈ ΡΠΊΠΎΠ»ΡΠ½ΠΈΠΊΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΡΡ ΡΠΊΠ°ΡΡΠΈΠΊ, ΠΎΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ, ΡΠΊΠ°ΡΡΠΈΠΊ ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π΅ΠΌΡ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π²ΡΠ΄Π°ΡΡ Π΅ΠΌΡ ΠΊΠΎΠ΄. ΠΡΠ»ΠΈ ΡΡΠΎΡ ΡΠΊΠ°ΡΡΠΈΠΊ ΡΠΆΠ΅ ΠΊΠ΅ΠΌ-Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ β ΠΎΠ½ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΡΠ΅Π½ΠΈΠΊΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄ΡΡ Π²ΡΠ±ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Data.Map Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΊΠ°ΡΡΠΈΠΊΠ°Ρ . ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½ΠΎΠΌΠ΅ΡΠ° ΡΠΊΠ°ΡΡΠΈΠΊΠ° Π² ΠΏΠ°ΡΡ, Π³Π΄Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΊΠ°ΡΡΠΈΠΊ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π° Π²ΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ β ΠΊΠΎΠ΄ ΡΠΊΠ°ΡΡΠΈΠΊΠ°.
import qualified Data.Map as Map
data LockerState = Taken | Free deriving (Show, Eq)
type Code = String
type LockerMap = Map.Map Int (LockerState, Code)
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ. ΠΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, Π±ΡΠ» ΡΠΊΠ°ΡΡΠΈΠΊ Π·Π°Π½ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π΄Π»Ρ ΠΊΠΎΠ΄Π° ΡΠΊΠ°ΡΡΠΈΠΊΠ° ΠΈ Π΄Π»Ρ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π² ΠΏΠ°ΡΡ ΠΈΠ· ΡΡΠ°ΡΡΡΠ° ΡΠΊΠ°ΡΡΠΈΠΊΠ° ΠΈ ΠΊΠΎΠ΄Π°. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏ Either String Code Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠΈΡΠΊ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ β ΡΠΊΠ°ΡΡΠΈΠΊ ΡΠΆΠ΅ Π·Π°Π½ΡΡ, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π»ΡΠ·Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΠΊΠ°ΡΡΠΈΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π²ΠΎΠΎΠ±ΡΠ΅. ΠΡΠ»ΠΈ ΠΏΠΎΠΈΡΠΊ Π½Π΅ ΡΠ΄Π°Π»ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° String Ρ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ.
lockerLookup :: Int β> LockerMap β> Either String Code
lockerLookup lockerNumber map =
case Map.lookup lockerNumber map of
Nothing β> Left $ "Π¨ΠΊΠ°ΡΡΠΈΠΊ β " ++ show lockerNumber ++
" Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ!"
Just (state, code) β>
if state /= Taken
then Right code
else Left $ "Π¨ΠΊΠ°ΡΡΠΈΠΊ β " ++ show lockerNumber ++ " ΡΠΆΠ΅ Π·Π°Π½ΡΡ!"
ΠΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Nothing, ΡΠΎ Π²Π΅ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Left String, Π³ΠΎΠ²ΠΎΡΡΡΠ΅Π΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡΠ»ΠΈ ΠΌΡ Π½Π°ΡΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ, Π΄Π΅Π»Π°Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π·Π°Π½ΡΡ Π»ΠΈ ΡΠΊΠ°ΡΡΠΈΠΊ. ΠΡΠ»ΠΈ ΠΎΠ½ Π·Π°Π½ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Left, Π³ΠΎΠ²ΠΎΡΡΡΠ΅Π΅, ΡΡΠΎ ΡΠΊΠ°ΡΡΠΈΠΊ Π·Π°Π½ΡΡ. ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π·Π°Π½ΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Right Code, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π°ΡΠΌ ΡΡΡΠ΄Π΅Π½ΡΡ ΠΊΠΎΠ΄ ΡΠΊΠ°ΡΡΠΈΠΊΠ°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Right String, Π½ΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ ΡΠΈΠΏΠ°, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°ΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ:
lockers :: LockerMap lockers = Map.fromList
[(100,(Taken,"ZD39I"))
,(101,(Free,"JAH3I"))
,(103,(Free,"IQSA9"))
,(105,(Free,"QOTSA"))
,(109,(Taken,"893JJ"))
,(110,(Taken,"99292"))
]
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ·Π½Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄ΠΎΠ².
ghci> lockerLookup 101 lockers
Right "JAH3I"
ghci> lockerLookup 100 lockers
Left "Π¨ΠΊΠ°ΡΡΠΈΠΊ β 100 ΡΠΆΠ΅ Π·Π°Π½ΡΡ!"
ghci> lockerLookup 102 lockers
Left "Π¨ΠΊΠ°ΡΡΠΈΠΊ β 102 Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ!"
ghci> lockerLookup 110 lockers
Left "Π¨ΠΊΠ°ΡΡΠΈΠΊ β 110 ΡΠΆΠ΅ Π·Π°Π½ΡΡ!"
ghci> lockerLookup 105 lockers
Right "QOTSA"
ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏ Maybe Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π½ΠΎ ΡΠΎΠ³Π΄Π° Π»ΠΈΡΠΈΠ»ΠΈΡΡ Π±Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·Π½Π°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ΄. Π Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΡΠΈΠ½Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°.
Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
ΠΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅ΠΉ (ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ²ΡΠ΅), ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΡΠΈΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΏ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ°! Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π° ΠΎΠ½ΠΈ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, ΠΈ Ρ. Π΄.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ: [5]. ΠΡΠΎ ΡΠΏΡΠΎΡΡΠ½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ 5:[]. Π‘ Π»Π΅Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° : ΡΡΠ°Π²ΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ β ΡΠΏΠΈΡΠΎΠΊ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΡΡΠΎΠΉ). ΠΠ°ΠΊ Π½Π°ΡΡΡΡ ΡΠΏΠΈΡΠΊΠ° [4,5]? ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ: 4:(5:[]). Π‘ΠΌΠΎΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ :, ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ»Π΅Π²Π° ΠΎΡ Π½Π΅Π³ΠΎ β Π²ΡΡ ΡΠ°ΠΊ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° ΡΠΏΡΠ°Π²Π° β ΡΠΏΠΈΡΠΎΠΊ (5:[]). Π’ΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΠΏΠΈΡΠΊΠ° 3:(4:(5:6:[])); ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈ ΠΊΠ°ΠΊ 3:4:5:6:[] (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ : ΠΏΡΠ°Π²ΠΎΠ°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π΅Π½), ΠΈ ΠΊΠ°ΠΊ [3,4,5,6].
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ ΠΈΠ»ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° : ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ (ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ).
ΠΡ ΡΡΠΎ ΠΆ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ.
data List a = Empty | Cons a (List a) deriving (Show, Read, Eq, Ord)
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΊ Π½Π°ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ². ΠΡΠΎ Π»ΠΈΠ±ΠΎ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Β«Π³ΠΎΠ»ΠΎΠ²ΡΒ») ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΏΠΈΡΠΊΠ° (Β«Ρ Π²ΠΎΡΡΠ°Β»). ΠΡΠ»ΠΈ ΡΠ°ΠΊΠ°Ρ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠ° ΡΡΡΠ΄Π½Π° Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, ΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π»Π΅Π³ΡΠ΅.
data List a = Empty | Cons { listHead :: a, listTail :: List a}
deriving (Show, Read, Eq, Ord)
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Cons ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅Π΄ΠΎΡΠΌΠ΅Π½ΠΈΠ΅. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Cons β Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ :. ΠΠ°ΠΊ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, Π² ΡΠΏΠΈΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ : β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π½Π°Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ°! ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΠΏΠΎΠ»Ρ: ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΈΠΏΠ° a ΠΈ Π²ΡΠΎΡΠΎΠ΅ ΡΠΈΠΏΠ° [a].
ghci> Empty
Empty
ghci> 5 `Cons` Empty
Cons 5 Empty
ghci> 4 `Cons` (5 `Cons` Empty)
Cons 4 (Cons 5 Empty)
ghci> 3 `Cons` (4 `Cons` (5 `Cons` Empty))
Cons 3 (Cons 4 (Cons 5 Empty))
ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Cons ΠΊΠ°ΠΊ ΠΈΠ½ΡΠΈΠΊΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, ΡΡΠΎΠ±Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° :. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Empty ΠΈΠ³ΡΠ°Π΅Ρ ΡΠΎΠ»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° [], ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 4 `Cons` (5 `Cons` Empty) ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ 4:(5:[]).
Π£Π»ΡΡΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠΈΠΊΡΠ½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π΅Ρ ΠΈΠΌΡ ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ . Π‘ΠΌΠΎΡΡΠΈΡΠ΅:
infixr 5 :β:
data List a = Empty | a :β: (List a) deriving (Show, Read, Eq, Ord)
ΠΠ΅ΡΠ²ΠΎΠ΅: ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π½ΠΎΠ²ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠ²Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ Π»Π΅Π²ΠΎ- ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΎΠ°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ β infixl 7 *, Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β infixl 6. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ±Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π»Π΅Π²ΠΎΠ°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 4 * 3 * 2 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ((4 * 3) * 2), ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΡΠ΅ΠΌ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 5 * 4 + 3 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ (5 * 4) + 3.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ a :β: (List a) Π²ΠΌΠ΅ΡΡΠΎ Cons a (List a). Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΏΠΈΡΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ghci> 3 :-: 4 :-: 5 :-: Empty
3 :-: (4 :-: (5 :-: Empty))
ghci> let a = 3 :-: 4 :-: 5 :-: Empty
ghci> 100 :-: a
100 :-: (3 :-: (4 :-: (5 :-: Empty))
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠΎΡ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²:
infixr 5 ++
(++) :: [a] β> [a] β> [a]
[] ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys)
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π΅ΡΡΠΌ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°! ΠΠ°Π·ΠΎΠ²ΡΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ^++:
infixr 5 ++
(^++) :: List a β> List a β> List a
Empty ^++ ys = ys
(x :β: xs) ++ ys = x :β: (xs ++ ys)
Π ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρβ¦
ghci> let a = 3 :-: 4 :-: 5 :-: Empty
ghci> let b = 6 :-: 7 :-: Empty
ghci> a ++ b
3 :-: (4 :-: (5 :-: (6 :-: (7 :-: Empty))))
ΠΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ ΠΈ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ±ΡΠ°Π·ΡΠΎΠΌ ΠΏΠΎ (x :β: xs). ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄Π°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ :β: ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ :, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ°ΠΌ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ (x :β: xs), ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ 8 ΠΈΠ»ΠΈ 'a', ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠΎΠ²[10].
ΠΡΡΠ°ΡΡΠΈΠΌ-ΠΊΠ° Π΄Π΅ΡΠ΅Π²ΠΎ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ ΠΈΠ· ΡΠ·ΡΠΊΠΎΠ² Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π‘, Π²ΠΎΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ: ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π΄Π²Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ°Π²ΡΠΉ, Π΄ΡΡΠ³ΠΎΠΉ β Π»Π΅Π²ΡΠΉ. ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ»Π΅Π²Π° β ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ, ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π° β Π±ΠΎΠ»ΡΡΠ΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π΄Π²Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (ΠΈΠ»ΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½, ΠΈΠ»ΠΈ Π½Π΅ ΡΡΡΠ»Π°ΡΡΡΡ Π²ΠΎΠΎΠ±ΡΠ΅). ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎ Π΄Π²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΠ΅Π². ΠΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ ΡΠ΄ΠΎΠ±Π½Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΏΡΡΡ, Π±ΡΠ΄ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΡΠΈ. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ Π±ΡΠ΄ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΡΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π½Π°ΠΉΡΠΈ 8 Π² Π½Π°ΡΠ΅ΠΌ Π΄Π΅ΡΠ΅Π²Π΅, ΠΌΡ Π½Π°ΡΠ½ΡΠΌ Ρ ΠΏΡΡΡΡΠΊΠΈ, ΠΈ ΡΠ°ΠΊ ΠΊΠ°ΠΊ 8 Π±ΠΎΠ»ΡΡΠ΅ 5, Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΠ·Π΅Π» ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 7, ΠΈ ΡΠ°ΠΊ ΠΊΠ°ΠΊ 8 Π±ΠΎΠ»ΡΡΠ΅ 7, ΡΠ½ΠΎΠ²Π° Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°ΠΉΠ΄ΡΡΡΡ Π²ΡΠ΅Π³ΠΎ Π·Π° ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ! ΠΡΠ»ΠΈ ΠΌΡ Π±Ρ ΠΈΡΠΊΠ°Π»ΠΈ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ (ΠΈΠ»ΠΈ Π² ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅), ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π±Ρ Π΄ΠΎ ΡΠ΅ΠΌΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.