"Isomorphism" рдЖрдзреБрдирд┐рдХ рдЧрдгрд┐рдд рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓ рдФрд░ рд╕реА # рдореЗрдВ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рди рдХреЗрд╡рд▓ рдЧрдгрд┐рддрдЬреНрдЮреЛрдВ (рдХрд┐рд╕реА рдЕрд╕реНрдкрд╖реНрдЯ рдЧрдгрд┐рддреАрдп рдкреНрд░рддреАрдХреЛрдВ рдФрд░ рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛) рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рднреА рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2 + 2 = 4) рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рд╕рдЦреНрдд рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
рд╣рд╛рд╕реНрдХреЗрд▓add :: (a, a) -> a add (x, y) = x + y
C # int Add(Tuple<int, int> pair) { return pair.Item1 + pair.Item2; }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рд╣реИ - рдЯреНрд░рд┐рдХрд┐рдпрд░ рдФрд░ рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдЕрд░реНрде рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рддрд░реАрдХрд╛ рд╣реИ :
рд╣рд╛рд╕реНрдХреЗрд▓ add' :: a -> a -> a add' x = \y -> x + y
C # Func<int, int> Add_(int x) { return y => x + y; }
рд╕реНрдкрд╖реНрдЯ рддрдереНрдп рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд┐ рдХрд┐рд╕реА рднреА рджреЛ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рд╡рд╛рдИ рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдВрдЧреЗ, рд╡реЗ рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
- рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рддреБрд░рдВрдд рд░рд╛рд╢рд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рдордп рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ),
- рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдЬреЛ рдЕрдВрдд рдореЗрдВ рд░рд╛рд╢рд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ - рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдиреНрдпрдерд╛ рдХреЛрдИ рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА: рдпрд╣ рд╡рд┐рд▓рдВрдмрд┐рдд рдЧрдгрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдЬрд╝реНрдо рднреА рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рдкрд╕ рдХрд░реВрдВрдЧрд╛ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж)ред
рдФрд░ рдпрд╣ "рдмрд╣реБрдд рд╕рдЦреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред"
рд╕рдорд░реВрдкрддрд╛рд╡рд╛рдж "рдХрд╛рдлреА рд╕рдЦреНрдд" рд╣реИ; рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг, рд╕рднреА рддрд░рд╣ рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд░реНрде рдореЗрдВ" рд╕рдорд╛рдирддрд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдКрдкрд░ рдХреА рджреЛрдиреЛрдВ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдареАрдХ-рдареАрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ: рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдореБрдЭреЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреЛрдиреЛрдВ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд╕рднреА рд╕рдорд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдПрдХ рдореЗрдВ рджреВрд╕рд░реЗ рдХрд╛ рджреЛ-рддрд░рдлрд╝рд╛ рдХрдирд╡рд░реНрдЯрд░ ред рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреНрд░рдХрд╛рд░ рд╕рдВрдХреНрд╖реЗрдк:
рд╣рд╛рд╕реНрдХреЗрд▓ curry :: ((a, b) тЖТ c) тЖТ a тЖТ b тЖТ c curry fxy = f (x, y), uncurry :: (a тЖТ b тЖТ c) тЖТ (a, b) тЖТ c uncurry f (x, y) = fxy
C # Func<TArg1, Func<TArg2, TRes>> Curry(Func<Tuple<TArg1, TArg2>, TRes> uncurried) { return arg1 => arg2 => uncurried(Tuple.Create(arg1, arg2)); } Func<Tuple<TArg1, TArg2>, TRes> Uncurry(Func<TArg1, Func<TArg2, TRes>> curried) { return pair => curried(pair.Item1)(pair.Item2); }
... рдФрд░ рдЕрдм рдХрд┐рд╕реА рднреА x, y рдХреЗ рд▓рд┐рдП :
рд╣рд╛рд╕реНрдХреЗрд▓ curry add $ x, y = uncurry add' $ (x, y)
C # Curry(Add)(x)(y) = Uncurry(Add_)(Tuple.Create(x, y))
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдЧрдгрд┐рддрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рд╣рд╛рд╕реНрдХреЗрд▓ curry . uncurry = id uncurry . curry = id id x = x
C # Compose(Curry, Uncurry) = Id Compose(Uncurry, Curry) = Id, : T Id<T>(T arg) => arg; Func<TArg, TFinalRes> Compose<TArg, TRes, TFinalRes>( Func<TArg, TRes> first, Func<TRes, TFinalRes> second) { return arg => second(first(arg)); } ... extension- ( Id ): Curry.Compose(Uncurry) = Id Uncurry.Compose(Curry) = Id, : public static Func<TArg, TFinalRes> Compose<TArg, TRes, TFinalRes>( this Func<TArg, TRes> first, Func<TRes, TFinalRes> second) { return arg => second(first(arg)); }
рдЖрдИрдбреА рдХреЛ "рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдЬреНрдо рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рджреЛ-рддрд░рдлрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рд╣реИ, рдЖрдк рд╣рдореЗрд╢рд╛ 1) рдПрдХ рдЪреАрдЬ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, 2) рдЗрд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓реЗрдВ, рдФрд░ 3) рдЗрд╕реЗ рдкрд╣рд▓реЗ рдореЗрдВ рдмрджрд▓реЗрдВред рдХреЗрд╡рд▓ рдРрд╕реЗ рджреЛ рдСрдкрд░реЗрд╢рди рд╣реИрдВ: рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдЪрд░рдг (рдирдВрдмрд░ 1) рдкрд░, рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рд╣реИред рдФрд░ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ (рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рднреА рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдФрд░ "рдХреБрдЫ" рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ)ред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рдкреНрд░рдореЗрдп рд╣реИ рдХрд┐ рдЖрдИрдбреА рддрддреНрд╡ рд╣рдореЗрд╢рд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Id рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп, рдмрд╣реБрд░реВрдкреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред
Isomorphism рдмрд╣реБрдд, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдЦреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ - рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо), рдЬрдмрдХрд┐ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЦреБрдж рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд╡рд╛рд╣рдХ)ред рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдЖрдЗрд╕реЛрд░реНрдлрд┐рдЬреНрдо рд╣рдореЗрд╢рд╛ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдЙрди "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдгреЛрдВ" рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╕реНрдХреЗрд▓ рдЬреИрд╕реА рдХрдИ "рдЙрдиреНрдирдд" рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рднреА рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ:
рд╣рд╛рд╕реНрдХреЗрд▓ toLazy :: a -> () -> a toLazy x = \_ -> a fromLazy :: (() -> a) -> a fromLazy f = f ()
C # Func<TRes> Lazy(TRes res) { return () => res; } TRes Lazy(Func<TRes> lazy) { return lazy(); }
рдпрд╣ рд╕рдорд░реВрдкрддрд╛ рдЖрд╕реНрдердЧрд┐рдд рд╕рдВрдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреА рд╣реИ - рдпрд╣ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдг" рд╣реИ, рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рднрд┐рдиреНрди рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖? рдУрдУрдкреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛, (рдордЬрдмреВрд░) "рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛" рдХреЗ рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП - рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдорджреНрджреЗрдирдЬрд░ - тАЛтАЛрдпрд╣ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рд╕рдЦреНрдд рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЖрдкрдХреЛ "рдмрд╣реБрдд рд╕рдЦреНрддреА рд╕реЗ" рд╕реЛрдЪрдиреЗ рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЗрдВ рд▓реАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╡рд╣ рдЧрдгрд┐рдд рдореЗрдВ рдкреНрд░реЗрд░рдгрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИ), рддреЛ рдЖрдкрдХреЗ рдлреИрд╕рд▓реЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд╛рдВрдЫрд┐рдд (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЙрджреНрджреЗрд╢реНрдпрдкреВрд░реНрдг) рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рд╕рдорд╕рд╛рдордпрд┐рдХрддрд╛ рдХреЛ рд╕рдордЭрдирд╛ - рдПрдХ рдРрд╕реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рддрд┐ рдЕрдзрд┐рдХ рдЪреМрдХрд╕ рд░рд╣рдиреЗ рдХрд╛ рд╕рдЪреЗрдд рдкреНрд░рдпрд╛рд╕ рд╣реЛ
рдФрд░ рд╡рд┐рджреЗрд╢реА рдХреЛрдб - рдпрд╣ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдгреЛрдВ" рдХреЗ рдЪрдХреНрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рдЕрдореВрд░реНрдд: рдЕрд░реНрдерд╛рддреН, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ, рдЬрд┐рд╕ рдкрд░ рдЗрди "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдгреЛрдВ" рдХреЛ рдЕрдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реЗ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг" рднреА рд╣реИрдВ)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реЛрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА - рдЕрдзрд┐рдХ рд╕рдлрд▓ (рд╕реВрдХреНрд╖реНрдо) рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдФрд░, рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгред
PS рдпрджрд┐ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рд╕реЗ рд▓рд╛рдн рд╣реБрдЖ рд╣реИ, рддреЛ рдореИрдВ "рдЕрдзрд┐рдХ рд╕рдлрд▓ (рд╕реВрдХреНрд╖реНрдо) рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди" рдФрд░ "рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг" рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд▓реМрдЯреВрдВрдЧрд╛ред