liftA2 :: (Applicative f) => (a β> b β> c) β> f a β> f b β> f c
ΠΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π²ΠΎΡ ΡΠ°ΠΊ:
liftA2 :: (Applicative f) => (a β> b β> c) β> f a β> f b β> f c
liftA2 f a b = f <$> a <*> b
ΠΠ½Π° ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΊΡΡΠ²Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΡΠΈΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½Π° ΡΡΠ½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΎΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½Ρ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΎΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ². ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΈΠΏ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ (a β> b β> c) β> (f a β> f b β> f c). ΠΠΎΠ³Π΄Π° ΠΌΡ Π΅Π³ΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ liftA2 Π±Π΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Ρ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄Π²ΡΠΌΡ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ: ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π·ΡΡΡ Π΄Π²Π° Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ²Π΅ΡΡΠΈ ΠΈΡ Π² ΠΎΠ΄Π½ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΈΡ Π΄Π²ΡΡ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Just 3 ΠΈ Just 4. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎΠ³ΠΎ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΡΡΠΈΡΡ:
ghci> fmap (\x β> [x]) (Just 4)
Just [4]
Π₯ΠΎΡΠΎΡΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Just 3 ΠΈ Just [4]. ΠΠ°ΠΊ Π½Π°ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Just [3,4]? ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ!
ghci> liftA2 (:) (Just 3) (Just [4])
Just [3,4]
ghci> (:) <$> Just 3 <*> Just [4]
Just [3,4]
ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ : β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Ρ ΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² Π½Π°ΡΠ°Π»Π΅. Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Just [3,4], ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π»ΠΈ ΠΌΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠΎ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Just 2, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Just [2,3,4]? ΠΠ°, ΠΌΠΎΠ³Π»ΠΈ Π±Ρ. ΠΠΎΡ ΠΎΠΆΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΎΠ΄ΠΈΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΡΠΈΡ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°Π·ΠΎΠ²ΡΠΌ Π΅Ρ sequenceA:
sequenceA :: (Applicative f) => [f a] β> f [a]
sequenceA [] = pure []
sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
Π-Π°-Π°, ΡΠ΅ΠΊΡΡΡΠΈΡ! ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠΈΠΏ. ΠΠ½ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π»ΠΎΠΆΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ Π² Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π’Π΅ΠΏΠ΅ΡΡ Π² Π΄Π΅Π»ΠΎ Π²ΡΡΡΠΏΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Ρ Β«Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉΒ» ΠΈ Β«Ρ Π²ΠΎΡΡΠΎΠΌΒ» (Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, x β ΡΡΠΎ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° xs β ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· Π½ΠΈΡ ), ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ sequenceA Ρ Β«Ρ Π²ΠΎΡΡΠΎΠΌΒ», ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΡΡ Π²Π½ΡΡΡΠΈ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x, ΡΠΏΠΈΡΠΎΠΊ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, β Π²ΠΎΡ ΠΈΠΌΠ΅Π½Π½ΠΎ!
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ:
sequenceA [Just 1, Just 2]
ΠΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΠΊΠ°Ρ Π·Π°ΠΏΠΈΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ:
(:) <$> Just 1 <*> sequenceA [Just 2]
Π Π°Π·Π±ΠΈΠ²Π°Ρ ΡΡΠΎ Π΄Π°Π»Π΅Π΅, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ:
(:) <$> Just 1 <*> ((:) <$> Just 2 <*> sequenceA [])
ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ sequenceA [] ΠΎΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Just [], ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
(:) <$> Just 1 <*> ((:) <$> Just 2 <*> Just [])
ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΠΎΠΌΡ:
(:) <$> Just 1 <*> Just [2]
β¦ΡΡΠΎ ΡΠ°Π²Π½ΠΎ Just [1,2]!
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ sequenceA β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΡΡΡΠΊΠΈ. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π»ΡΠ±Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π³Π΄Π΅ ΠΌΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π·Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΏΠΎΠΏΡΡΠ½ΠΎ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΡΡΡΠΊΠΈ:
sequenceA :: (Applicative f) => [f a] β> f [a]
sequenceA = foldr (liftA2 (:)) (pure [])
ΠΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΊΠΎΠ½ΡΠ°, Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠ° ΡΠ°Π²Π½ΠΎΠ³ΠΎ pure []. ΠΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ liftA2 (:) ΠΌΠ΅ΠΆΠ΄Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ°, ΡΡΠΎ Π΄Π°ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ liftA2 (:) Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΌ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ Ρ. Π΄., Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Ρ Π½Π°Ρ Π½Π΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΠ΅Ρ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ:
ghci> sequenceA [Just 3, Just 2, Just 1]
Just [3,2,1]
ghci> sequenceA [Just 3, Nothing, Just 1]
Nothing
ghci> sequenceA [(+3),(+2),(+1)] 3
[6,5,4]
ghci> sequenceA [[1,2,3],[4,5,6]]
[[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]]
ghci> sequenceA [[1,2,3],[4,5,6],[3,4,4],[]]
[]
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° Maybe ΡΡΠ½ΠΊΡΠΈΡ sequenceA ΡΠΎΠ·Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Maybe, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π²ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ°Π²Π½ΠΎ Nothing, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Nothing. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΡΡΠ΄Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° Maybe ΠΈ Π²Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ , ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ Π½Π΅ ΡΠ°Π²Π½ΠΎ Nothing!
Π ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ sequenceA ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΡΠ»Π° ΡΠΈΡΠ»ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»Π° Π΅Π³ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅, Π° Π·Π°ΡΠ΅ΠΌ Π²Π΅ΡΠ½ΡΠ»Π° ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΡ sequenceA [(+3),(+2),(+1)] 3 Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ (+3) Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ 3, (+2) β Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ 3 ΠΈ (+1) β Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ 3 ΠΈ Π²Π΅ΡΠ½ΡΡ Π²ΡΠ΅ ΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ°.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (+) <$> (+3) <*> (*2) ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (+3) ΠΈ (*2), Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ + Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΡΡ ΡΠΌΡΡΠ» Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ sequenceA [(+3),(*2)] ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠΌΠ΅ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° + Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ : ΠΈ pure [] Π΄Π»Ρ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ sequenceA ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠΌ Π²ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π²Π²ΠΎΠ΄, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΈΡΠ»ΠΎ ΠΈ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π»ΠΈ ΠΎΠ½ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°ΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠΎΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
ghci> map (\f β> f 7) [(>4),(<10),odd]
[True,True,True]
ghci> and $ map (\f β> f 7) [(>4),(<10),odd]
True
ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ and ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° Bool ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ True, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΡΠ°Π²Π½Ρ True. ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΡΡΠΈΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° β ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ sequenceA:
ghci> sequenceA [(>4),(<10),odd] 7
[True,True,True]
ghci> and $ sequenceA [(>4),(<10),odd] 7
True
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ sequenceA [(>4),(<10),odd] ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΈΡΠ»ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°ΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅ [(>4),(<10),odd] ΠΈ Π²Π΅ΡΠ½ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π±ΡΠ»Π΅Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ½Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Ρ ΡΠΈΠΏΠΎΠΌ (Num a) => [a β> Bool] Π² ΡΡΠ½ΠΊΡΠΈΡ Ρ ΡΠΈΠΏΠΎΠΌ (Num a) => a β> [Bool]. ΠΡΠ°Π²Π΄Π°, ΠΊΠ»ΡΠ²ΠΎ, Π°?
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΠΈΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½Ρ, Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠΎΠ΄Π΅ [ord, (+3)], ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ord ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ (+3) ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ [] ΡΡΠ½ΠΊΡΠΈΡ sequenceA ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ½Π° ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΏΠΈΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ sequenceA, Π° Π·Π°ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΡΠΏΠΈΡΠΊΠΎΠ²:
ghci> sequenceA [[1,2,3],[4,5,6]]
[[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]]
ghci> [[x,y] | x <β [1,2,3], y <β [4,5,6]]
[[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]]
ghci> sequenceA [[1,2],[3,4]]
[[1,3],[1,4],[2,3],[2,4]]
ghci> [[x,y] | x <β [1,2], y <β [3,4]]
[[1,3],[1,4],[2,3],[2,4]]
ghci> sequenceA [[1,2],[3,4],[5,6]]
[[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
ghci> [[x,y,z] | x <β [1,2], y <β [3,4], z <β [5,6]]
[[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (+) <$> [1,2] <*> [4,5,6] Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ x + y, Π³Π΄Π΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ x ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· [1,2], Π° y ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· [4,5,6]. ΠΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ sequenceA [[1,2],[3,4],[5,6]], ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ [x,y,z], Π³Π΄Π΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ x ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· [1,2], Π° y β ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· [3,4] ΠΈ Ρ. Π΄. ΠΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠΎΠ³ΠΎ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΠΈΡΠΊΠΎΠ².