рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдЬреАрдм рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдЕрдЬрдЧрд░ рдореЗрдВ рднрд┐рдХреНрд╖реБ

рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ!

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдмрд╛рд░ рд╕рд╛рдзреБрдУрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╕рднреА рдирд┐рдХрд┐рдХ рдзрд╛рдЧреЗ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝ рд╕рдХреЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ (рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рдХреА рдХрдореА рд╣реЛ рд╕рдХрддреА рд╣реИ)ред рд╢рд╛рдирджрд╛рд░ рдХрд┐рддрд╛рдм рд▓рд░реНрди рдпреВ рд╣рд╕реНрдХрд▓ рдлреЙрд░ рдЧреНрд░реЗрдЯ рдЧреБрдб рдиреЗ рдорджрдж рдХреАред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдпрд╛, рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ / рдорд┐рддреНрд░реЛрдВ рдХреЛ рдмрддрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рдо рдкрд╛рдпрдерди рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдлрд┐рд▓реНрдЯрд░ / рдореИрдк / рдХрдо рд╕реЗ рдХрдо "рдЗрд╕ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛" рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рддрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдХрд░рддреЗ рд╣реБрдП, рдмрд╛рдд рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ-рджреЛ рдордареЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рддрд╛рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╣реЛрдиреА рдореЗрдВ рдмрджрд▓ рди рдЬрд╛рдПред рдмреЗрд╢рдХ, рдореИрдВ рдкрд╣рд▓рд╛ рдФрд░ рдЖрдЦрд┐рд░реА рдирд╣реАрдВ рд╣реВрдВ, рдкрд╛рдпрдерди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдордареЛрдВ рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЗ, рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реЗ рдереЗ рдпрд╛ рддреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдордЭрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рд╛рдзреНрдп рдпрд╛ рдХрдард┐рди рдерд╛ред рдореБрдЭреЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рдерд╛, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ...


рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдЖрдзрд╛рд░: рд╢реНрд░реЗрдгреА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдзреНрдпрдпрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдореБрдЭреЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЙрдореНрдореАрдж рд╣реИ (рдФрд░ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╛рдо рдЖрдПрдЧрд╛)ред

рдореИрдВрдиреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдореЛрдирд╛рдб рдкрде рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдореЛрдирд╛рдб рдЖрд╡реЗрджрдХ рдлрдВрдХреНрд╢рдирд▓рд░реНрд╕ рдХреЗ рд╕рд╛рдордиреЗ рдЖрдПред рдореИрдВрдиреЗ рднреА, (рд╢рд╛рдпрдж рдЕрднреА рддрдХ рдирд╣реАрдВ) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рдирд▓рд░реНрд╕ / рдРрдкреНрд▓рд┐рдХреЗрдЯрд┐рд╡ рдлрд╝рдВрдХреНрд╢рдВрд╕ред рд▓реЗрдХрд┐рди рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛, рд╢рд╛рдпрдж рдореЛрдирд╛рдж рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдХрднреА-рдХрднреА рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЛ рдХреБрдЫ рдореВрд▓реНрдп рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЕрд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рднреА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдХрд╛рдлреА рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдХрдИ рд▓реЛрдЧ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ: "рдкрд╛рдпрдерди рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╣реИрдВред" рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА 100 / x рдЬреИрд╕реА рд╕рд░рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ / рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХреБрдЫ рд╣рдж рддрдХ рдмреЛрдЭрд┐рд▓ рд╣реИред рдпрд╣ рдПрдХ рдЯрдкрд▓ (рдмреВрд▓, рдкрд░рд┐рдгрд╛рдо) рдХреА рддрд░рд╣ рдХреБрдЫ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреАрдЦ рдорд╛рдВрдЧрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рд╢рдмреНрдж рдЕрд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╢рд╛рдпрдж рд╕рдиреНрдпрд╛рд╕реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорда рдХрд╛ рдЕрд░реНрде рдирд┐рдХрд▓рддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░, рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдХрднреА-рдХрднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдореИрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (>> =)ред рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЖрдкрдХреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЧрдгрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдмрд╛рдзреНрдпрдХрд╛рд░реА рдСрдкрд░реЗрд╢рди рд╣реА, рдЬрдм рдкрд┐рдЫрд▓рд╛ рдЪрд░рдг рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рднреА рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдЕрд░реНрдерд╣реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реБрдЖ:

class _MaybeMonad(object): def __init__(self, just=None, nothing=False): self._just = just self._nothing = nothing def __rshift__(self, fn): if not self._nothing: res = fn(self._just) assert isinstance(res, _MaybeMonad), ( "In Maybe context function result must be Maybe") self._just = res._just self._nothing = res._nothing return self @property def result(self): return (self._nothing, self._just) 


рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдкрд░, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдпрд╛ рддреЛ рдПрдХ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╕рд┐рд░реНрдл = x рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдпрд╛ рдЕрд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд (рдХреБрдЫ рднреА рдирд╣реАрдВ = рд╕рддреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рднреА рдкреВрд░реНрд╡рддрд╛ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред
рдореЛрдирдб рд╡реИрд▓реНрдпреВ (рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг) рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдгрд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЯрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

 nothing = lambda: _MaybeMonad(nothing=True) just = lambda val: _MaybeMonad(just=val) 

рдкрд╣рд▓рд╛ рдПрдХ рдЕрд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╕рдлрд▓

рдЧрдгрдирд╛ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЙрдкрдирд╛рдо рдмрдирд╛рдпрд╛:

 returnM = just 


рдЕрдм рдЖрдк рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдп рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:

 def divM(value, divider): '''  .   . "" ''' if divider: return just(value // divider) return nothing() div100by = lambda x: divM(100, x) # ,    def sqrtM(value): if value >= 0: return just(math.sqrt(value)) return nothing() 


рдПрдХ рдмрд╛рдВрдзрдиреЗ рдХреА рдорд╢реАрди рдЖрдк рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 do = returnM(4) >> div100by >> sqrtM # 4 -  error, result = do.result 


рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдпрд╣ рдХреНрд░рдо рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рдХреЛ рдкрдЪрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕ рдкрд░ math.sqrt рдареЛрдХрд░ рдЦрд╛рдПрдЧрд╛); рд╡рд┐рднрд╛рдЬрди рдСрдкрд░реЗрд╢рди рдЖрдо рддреМрд░ рдкрд░ 0 рдХреЛ рдПрдХ рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ (), рдЬреЛ рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдкрд╡рд╛рдж рдЕрддреНрдпрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред

рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 lift = lambda fn: lambda val: just(fn(val)) 


рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:
рд▓рд┐рдлреНрдЯ (рд╕реНрдЯреНрд░реИ) рд╕рд╛рдзрд╛рд░рдг рд╕реНрдЯреНрд░реЗрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ "рдкреБрд▓" рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдорд╛рдирдж рдореВрд▓реНрдп рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдм, рдПрдХ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реА (рдзрдиреНрдпрд╡рд╛рдж, рдирд┐рд╢реНрдЪрд┐рдд ) рдЬреЛрдбрд╝реЗрдВ:

 curried = lambda fn, *cargs: lambda *args: fn(*(cargs + args)) 


рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЙрджрд╛рд╣рд░рдг:

 def calc(x): do = ( returnM(x) >> curried(maybe_div, 100) >> lift(lambda x: x+75) >> lift(int) ) #   failed, result = do.result if failed: print "  ((" else: print ": %s" % result calc(0) #   100 / 0 calc(4) 


рдпрд╣ рдХрд╛рдлреА рдкрд╛рдЗрдереЛрдирд┐рдХ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реИрдореНрдмреНрдбрд╛ рдкрд░ рд▓реИрдореНрдмреНрдбрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдареАрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдореИрдВ рд╕реВрдЪреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рд░реБрдЪрд┐ рд╣реЛрдЧреА - рдПрдХ рд▓реЗрдЦ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In138546/


All Articles