рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
YOW рдкрд░! 2013 рд╣рд╛рд╕реНрдХреЗрд▓ рднрд╛рд╖рд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ,
рдкреНрд░реЛрдлреЗрд╕рд░ред рдлрд┐рд▓рд┐рдк рд╡рд╛рдбрд▓рд░ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рднрд┐рдХреНрд╖реБ рд╢реБрджреНрдз рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкрд░рд┐рдЪрд╛рд▓рди рдЬреИрд╕реЗ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рджрд░реНрд╢рдХреЛрдВ рдХреА рд░реБрдЪрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрдлреЛрдЯрдХ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдХрд╛рд╢рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдирдП рд▓реЛрдЧ рдордареЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рднрд┐рдХреНрд╖реБ рд╣рд╛рд╕реНрдХреЗрд▓ рдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИред
рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдмрд╛рдХрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИ? рд╣рдо рдХреЗрд╡рд▓ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдФрд░ рдкрд╛рдпрдерди рдХреЛрдб рдХреЗ рдХреБрдЫ рдкреНрд░рд╛рдердорд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 15 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдореЗрдВ рдордареЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдмреНрдпреВрд░рд┐рдЯреЛрд╕,
рд╕реНрдкреЗрд╕ рд╕реВрдЯ ,
рдбреЗрд╕реНрдХ рдФрд░ рдПрдВрдбреЛрдлреБрдиреНрдХреНрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рджреЗрдВрдЧреЗред
рдкреНрд░реЗрд░рдХ рдЙрджрд╛рд╣рд░рдг
рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреАрди рдореБрджреНрджреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЙрдиреНрд╣реЗрдВ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ: рд╕рд╛рдорд╛рдиреНрдп рдЕрдирд┐рд╡рд╛рд░реНрдпрддрд╛ рдФрд░ рдореЛрдирд╛рдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдлрд┐рд░ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред
1. рд▓реЙрдЧрд┐рдВрдЧ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рддреАрди рдХрд╛рд░реНрдп рд╣реИрдВ:
f1
,
f2
рдФрд░
f3
, рдЬреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд╢рдГ 1, 2 рдФрд░ 3 рддрдХ рдмрдврд╝рд╛рдХрд░ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рдВрджреЗрд╢ рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рди рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред
def f1(x): return (x + 1, str(x) + "+1") def f2(x): return (x + 2, str(x) + "+2") def f3(x): return (x + 3, str(x) + "+3")
рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░
x
рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЪреЗрди рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо
x+1+2+3
рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рдорд╛рдирд╡-рдкрдардиреАрдп рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред
рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
log = "Ops:" res, log1 = f1(x) log += log1 + ";" res, log2 = f2(res) log += log2 + ";" res, log3 = f3(res) log += log3 + ";" print(res, log)
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреАрд░рд╕ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЕрдкрдиреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
res
рдФрд░
log
рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрд┐рдЧрд╛рдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдореБрдЦреНрдп рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐
f3(f2(f1(x)))
ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
f1
рдФрд░
f2
рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░
f2
рдФрд░
f3
рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдирдП рдХрд╛рд░реНрдп рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
def unit(x): return (x, "Ops:") def bind(t, f): res = f(t[0]) return (res[0], t[1] + res[1] + ";")
рдЕрдм рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
print(bind(bind(bind(unit(x), f1), f2), f3))
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░
x=0
рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ
v1
,
v2
рдФрд░
v3
unit
рдФрд░
bind
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдорд╛рди
bind
ред

unit
рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░
x
рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЯреНрдпреВрдкрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
bind
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░
t
рдореЗрдВ рдЬрдорд╛ рдХрд░рддрд╛
t
ред
рд╣рдо рдЗрд╕реЗ
bind
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░рдЦрдХрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЕрдм, рдЕрдЧрд░ рд╣рдореЗрдВ рдлрдВрдХреНрд╢рди
f4
рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЪреЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ:
bind(f4, bind(f3, ... ))
рдФрд░ рд╣рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
2. рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА
рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
def f1(x): return x + 1 def f2(x): return x + 2 def f3(x): return x + 3
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ
x+1+2+3
рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ,
x
,
x+1
,
x+1
,
x+1+2
рдФрд░
x+1+2+3
ред
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рд░рдЪрдирд╛ рдпреЛрдЧреНрдп рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЙрдирдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛
f3(f2(f1(x)))
рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред
рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ "рд╕рд┐рд░ рдкрд░" рд╣рд▓ рдХрд░реЗрдВ:
lst = [x] res = f1(x) lst.append(res) res = f2(res) lst.append(res) res = f3(res) lst.append(res) print(res, lst)
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рд╣рдо
f4
рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рд╣реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
def unit(x): return (x, [x]) def bind(t, f): res = f(t[0]) return (res, t[1] + [res])
рдЕрдм рд╣рдо рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
print(bind(bind(bind(unit(x), f1), f2), f3))
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░
x=0
рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ,
v1
,
v2
рдФрд░
v3
unit
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓ рдХреЛ
bind
рд╣реИрдВред

3. рд░рд┐рдХреНрдд рдорд╛рди
рдЖрдЗрдП рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЗрд╕ рдмрд╛рд░ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рдеред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ
Employee
рд╡рд░реНрдЧ рд╣реИ:
class Employee: def get_boss(self):
Employee
рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдкреНрд░рдмрдВрдзрдХ (
Employee
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдФрд░ рдЙрджреНрджреЗрд╢реНрдп) рдФрд░ рдПрдХ рд╡реЗрддрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЙрдЪрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреА рд╣реИрдВ (рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдкрд╛рд╕ рдкреНрд░рдмрдВрдзрдХ рдирд╣реАрдВ рд╣реИ, рд╡реЗрддрди рдЕрдЬреНрдЮрд╛рдд рд╣реИ)ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЗрд╕ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдиреЗрддрд╛ рдХреЗ рд╡реЗрддрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рдмрдВрдзрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдпрд╛ рдЙрд╕рдХрд╛ рд╡реЗрддрди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо
None
рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
print(john.get_boss().get_wage())
рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдХреЛрдИ рднреА рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕
None
рдЖрддреА рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
result = None if john is not None and john.get_boss() is not None and john.get_boss().get_wage() is not None: result = john.get_boss().get_wage() print(result)
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо
get_boss
рдФрд░
get_wage
рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рднрд╛рд░реА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ), рддреЛ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ:
result = None if john is not None: boss = john.get_boss() if boss is not None: wage = boss.get_wage() if wage is not None: result = wage print(result)
рдЧрдгрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдХреЛрдб рдЗрд╖реНрдЯрддрдо рд╣реИ, рд▓реЗрдХрд┐рди рддреАрди рдиреЗрд╕реНрдЯреЗрдб
if
рдХрд╛рд░рдг рдЦрд░рд╛рдм рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рдорд╛рди рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
def unit(e): return e def bind(e, f): return None if e is None else f(e)
рдФрд░ рдЕрдм рд╣рдо рдкреВрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
print(bind(bind(unit(john), Employee.get_boss), Employee.get_wage))
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ
unit
рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдерд╛: рдпрд╣ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдлрд┐рд░ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╣рдо рдРрд╕реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ
john.get_boss()
рдмрдЬрд╛рдп
Employee.get_boss(john)
рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд░реЗрдЦ рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрдм рдЬреЙрди рдХреЗ рдкрд╛рд╕ рдПрдХ рдиреЗрддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН
john.get_boss()
None
рджреЗрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
f1
,
f2
,
тАж
,
fn
ред рдпрджрд┐ рдЙрдирдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рдкрддреНрд░
fn(тАж f2(f1(x)) тАж)
рдПрдХ рд╕рд░рд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд░реЗрдЦ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ
v1
,
v2
,
тАж
,
vn
рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдХреНрд╕рд░ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрдВрдкреЛрдЬрд╝реЗрдмрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг 2 рдФрд░ 3 рдореЗрдВ рд╣рдордиреЗ рдХреНрд░рдорд╢рдГ рдордзреНрдпрд╡рд░реНрддреА рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХрддреНрд░реАрдХрд░рдг рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдбрд╛рд▓рд╛ред
1. рдЗрдВрдкреАрд░рд┐рдпрд▓ рдирд┐рд░реНрдгрдп
рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

f1
рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
f1
рд╣рдордиреЗ рдХреБрдЫ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд┐рдпрд╛ред рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛, рджреВрд╕рд░реЗ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдПред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛: рд╣рдордиреЗ рдХреБрд▓ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА,
None
рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ
None
ред
2. рдореЛрдирд╛рдб
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд┐рд░реНрдгрдп рд╣рдореЗрд╢рд╛ рд╡рд╛рдЪрд╛рд▓рддрд╛, рджреЛрд╣рд░рд╛рд╡ рдФрд░ рднреНрд░рд╛рдордХ рддрд░реНрдХ рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рдордиреЗ рджреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдП:
unit
рдФрд░
bind
ред рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ
рдореЛрдирд╛рдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
bind
рдлрдВрдХреНрд╢рди рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐
unit
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
bind(bind( ... bind(bind(unit(x), f1), f2) ... fn-1), fn)
рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрд░реЗрдЦ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

unit(x)
рд▓рд┐рдП рдПрдХ рдХреЙрд▓
v1
рдХрд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░
bind(v1, f1)
рдПрдХ рдирдпрд╛ рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдп
v2
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд▓реА рдХреЙрд▓ рдореЗрдВ
bind(v2, f2)
ред рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИред рд╡рд┐рднрд┐рдиреНрди
unit
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдФрд░ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рд╣рдо рдЧрдгрдирд╛ рдХреЗ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореЛрдирд╛рдб рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдореЛрдирдб рдпрд╛ рдУрдПрд╕рд▓реИрд╢ - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред ) рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХреБрдЫ рд░рдЪрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдбреА-рдЯреВ-
рдпреВрдЬрд╝ рдореЛрдирдб (
unit
рдФрд░
bind
рдлрд╝рдВрдХреНрд╢рдВрд╕)
bind
ред
рдЪреЗрди рдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП,
unit
рдФрд░
bind
рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ
bind
рдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ
рдореЛрдиреИрдбрд┐рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЖрд░реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╡реЗрд░рд┐рдПрдмрд▓
v1
,
v2
,
тАж
,
vn
рдкреНрд░рдХрд╛рд░ рдПрдХ рдореЛрдирдбрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рднрд┐рдХреНрд╖реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдмрд╛рд░-рдмрд╛рд░
bind
рдХреЙрд▓ рдЕрд╕рднреНрдп рджрд┐рдЦрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
def pipeline(e, *functions): for f in functions: e = bind(e, f) return e
рдЕрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
bind(bind(bind(bind(unit(x), f1), f2), f3), f4)
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
pipeline(unit(x), f1, f2, f3, f4)
рдирд┐рд╖реНрдХрд░реНрд╖
рдореЛрдирд╛рдб рдПрдХ рд╕рд░рд▓ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдпрд╣ рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдЬреИрд╕реА рдЕрдирд┐рд╡рд╛рд░реНрдпрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ
рдпрд╣ рдХреЛрдб рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдХреЗрд╡рд▓ рднрд┐рдХреНрд╖реБрдУрдВ рдХреА рдПрдХ рд╕рддрд╣реА, рд╕рд╣рдЬ рд╕рдордЭ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛
- рдЕрдЬрдЧрд░ рдореЗрдВ рд░рд╛рдХреНрд╖рд╕ (рдЕрдЪреНрдЫрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде!)
- рдореЛрдирд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕рдордпрд░реЗрдЦрд╛