Julia: рдлрдВрдХреНрд╢рди рдЪреИрдирд┐рдВрдЧ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬрдире░ 2014  ┬╖  232рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

рдХреНрдпрд╛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдорд╛рди рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВ?
рдкреВрд░реНрд╡ред

sum(a::Int, b::Int) -> a + b

a = 1
sum(1, 2) # = 3
a.sum(2) # = 3 or
1.sum(2) # = 3

рдХреНрдпрд╛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд░рди рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

рд╕рдВрдХреБрд▓

рдиреЙрдирдкреИрдХреЗрдЬ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк

рд╕рдореНрдмрдВрдзрд┐рдд:


рд╢рд╛рдпрдж рдЗрд╕реЗ рд╢реАрд░реНрд╖ рдкрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛: 2020-04-20

рд╕рднреА 232 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

. рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдкрд░реНрдпрд╛рдп рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ 1.sum(2) sum(1,2) рдХреЗ рд▓рд╛рдн рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИ, рдПрдХ рддрд░рдл рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╢рд░реАрд░ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдЕрд▓рдЧ..рдХреИрдЪред

1.sum (2) рдХрд╛ рдЙрджрд╛рд╣рд░рдг рддреБрдЪреНрдЫ рд╣реИ (рдореИрдВ рднреА рд░рд╛рд╢рд┐ (1,2) рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ) рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреВрд░реНрд╡ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИред 1 рдХреЛ рдПрдХ рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд░рд┐рдпрд▓ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЙрди рдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЗрдВрдЯ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдЧрд▓рдд рд▓рдЧ рд╕рдХрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рд▓реНрдбрд░ рдкреИрдЯрд░реНрди рдЬреИрд╕реЗ рдХреБрдЫ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдбреЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред рдкреВрд░реНрд╡ред

validate_for(name).required().gt(3) 
# vs 
gt(required(validate_for(name)), 3) 

рдЬрд┐рди рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдореИрдВ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡реЗ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдореЛрдВ (рдЬреЛ рдХрд┐ рд╡реИрд╕реЗ рднреА рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг a.sum (2) .sum (4) рдХрд╣рд▓рд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ .sum (2) рдХрднреА-рдХрднреА рдПрдХ Int рдХреЗ рдмрдЬрд╛рдп рдПрдХ String рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди ss (4) рдПрдХ Int рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ / рд░рдирдЯрд╛рдЗрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИ - рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдпреЛрдЧ (рд░рд╛рд╢рд┐ (1, 2), 4) рдХреЛ рдШреЛрдВрд╕рд▓реЗ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдбреЙрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ред

рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рд╣реИред рдУрдУрдкреА рдПрдкреАрдЖрдИ рдореЗрдВ рдпрд╣ рдХрднреА-рдХрднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд┐рдзрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рддреЛ рдЖрдк some_obj.move(4, 5).scale(10).display() рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди |> рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдПрдХ рдЖрдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп, рдЬреИрд╕реЗ some_obj |> x -> move(x, 4, 5) |> x -> scale(x, 10) |> display , рдЬреЛ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ |> LHS рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ RHS рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрддрд╛рдП, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк @composed рдореИрдХреНрд░реЛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдореНрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛

рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

function move(obj, x, y)
    # move the object
end

move(x, y) = obj -> move(obj, x, y)

рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрдВрд╢рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ (1 рддрд░реНрдХ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ) рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рддрдм рдПрдХ рд╕рд╛рдорд╛рдиреНрдп |> рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджрд░рдЕрд╕рд▓, |> рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╢рд╛рдпрдж рдЕрднреА рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЖрдкрдХреЗ рд▓рд┐рдП рдкреВрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдиреВрдВрдЧрд╛ред

рд╕реЛрдорд╡рд╛рд░, 27 рдЬрдирд╡рд░реА, 2014 рдХреЛ, рд╕реНрдкреЗрдВрд╕рд░ рд░рд╕реЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рд╣реИред рдЖрдИрдЯреА рдЗрд╕
рдХрднреА-рдХрднреА рдУрдУрдкреА рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд┐рдзрд┐рдпрд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
some_obj.move (4, 5) .scale (10) .display () рдЬреИрд╕реА рдЪреАрдЬреЗрдВ

рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдЬрдм рддрдХ рдЖрдк anon рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗред рдХрд╛рд░реНрдп, рдЬреИрд╕реЗ some_obj
|> x -> рдЪрд╛рд▓ (x, 4, 5) |> x -> рд╕реНрдХреЗрд▓ (x, 10) |> рдкреНрд░рджрд░реНрд╢рди, рдЬреЛ рд╕реБрдВрджрд░ рд╣реИ
рдмрджрд╕реВрд░рддред

рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ рдпрджрд┐ |> LHS рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛
рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд░рдПрдЪрдПрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рддрд░реНрдХ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛
рдЗрд╕реЗ рдЕрдм рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ @ рдХрдВрдкреЛрдЬреНрдб рдореИрдХреНрд░реЛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдЬреЛрдбрд╝ рджреЗрдЧрд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддрд░рд╣

рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЗрд╕реЗ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдбрд┐рдЬрд╝рд╛рдЗрдирд░, рдЬрд╣рд╛рдБ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдлрдВрдХреНрд╢рди рдореВрд╡ (obj, x, y)
# рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
рд╕рдорд╛рдкреНрдд

рдЪрд╛рд▓ (x, y) = obj -> рдЪрд╛рд▓ (obj, x, y)

рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрдВрд╢рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
(1 рддрд░реНрдХ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ) рдЬрд┐рд╕реЗ рдЖрдк рддрдм рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ a
рд╕рд╛рдорд╛рдиреНрдп |> рд╢реНрд░реГрдВрдЦрд▓рд╛ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзрд╛ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHubhttps: //github.com/JuliaLang/julia/issues/5571#issuecomment -33408448 рдкрд░ рджреЗрдЦреЗрдВред
ред

ssfrr рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕реЛрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рд╣реИ! рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд░рдЪрдирд╛ |> рдЕрдирдЬрд╛рди рдерд╛ред рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ [https://github.com/JuliaLang/julia/issues/4963]ред

kmsquire рдореБрдЭреЗ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реНрд╡ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред some_obj |> move(4, 5) |> scale(10) |> display ред рдореВрд▓ рд╕рдорд░реНрдерди рдХрд╛ рдорддрд▓рдм рдПрдХ рдХрдо рдмрдВрдж рд╣реЛрдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди ssfrr рдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╢реАрдШреНрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рджрд░рдЕрд╕рд▓, @ssfrr рд╕рд╣реА рдерд╛ - рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рдореИрдХреНрд░реЛрдЬрд╝ (рдЙрджрд╛ред Http://clojuredocs.org/clojure_core/clojure.core/-%3E) рдлреИрд▓рд╛ рд░рд╣рд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ @ -> @ - >> - @ -; >> рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ infix macros рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╕реАрдорд╛рдПрдВ рдХреНрдпрд╛ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ @ssfrr рдХреЗ рдХрдореНрдкреЛрдЬрд╝ рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

import Base.Meta.isexpr
_ispossiblefn(x) = isa(x, Symbol) || isexpr(x, :call)

function _compose(x)
    if !isa(x, Expr)
        x
    elseif isexpr(x, :call) &&    #
        x.args[1] == :(|>) &&     # check for `expr |> fn`
        length(x.args) == 3 &&    # ==> (|>)(expr, fn)
        _ispossiblefn(x.args[3])  #

        f = _compose(x.args[3])
        arg = _compose(x.args[2])
        if isa(f, Symbol)
            Expr(:call, f, arg) 
        else
            insert!(f.args, 2, arg)
            f
        end
    else
        Expr(x.head, [_compose(y) for y in x.args]...)
    end
end

macro compose(x)
    _compose(x)
end
julia> macroexpand(:(<strong i="11">@compose</strong> x |> f |> g(1) |> h('a',"B",d |> c(fred |> names))))
:(h(g(f(x),1),'a',"B",c(d,names(fred))))

рдпрджрд┐ рд╣рдо рдЗрд╕ |> рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрднреА рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдПрдВ рдХреЗ рдмрдЬрд╛рдп рджрд╛рдИрдВ рдУрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдПрдХ рднрд╛рд░реА рдХрдЪрд░реЗ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

+1ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдЖрдк рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдорддреМрд░ рдкрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд╛рдпрдерди рдореЗрдВ рдкрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк df.groupby ("рдХреБрдЫ") рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрд▓ (рдпреЛрдЧ) .std () (рд░реАрд╕реЗрдЯ) (), рдЬреЛ рд╡рд░реНрддрдорд╛рди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рд╣реИ>> рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ ред

: +1: рдЗрд╕рдХреЗ рд▓рд┐рдПред

(рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП .. infix рдСрдкрд░реЗрдЯрд░ ( obj..move(4,5)..scale(10)..display ) рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдСрдкрд░реЗрдЯрд░ |> рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)

рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрд░реА рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреАрдиреА рдЬреЛрдбрд╝рдирд╛, рдЬреИрд╕реЗ
f(a,~,b) x->f(a,x,b) ред рддрдм |> рдЕрдкрдирд╛ рд╡рд░реНрддрдорд╛рди рдЕрд░реНрде рд░рдЦ рд╕рдХрддреЗ рдереЗред

рдКрд╣, рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред

рд╕рдВрднрд╡рддрдГ рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдмреНрджрд┐рдХ рдЬреИрд╕реЗ рдХреБрдЫ, рдЬрд╣рд╛рдВ #(% + 5) x -> x + 5 рд▓рд┐рдП рдЖрд╢реБрд▓рд┐рдкрд┐ рд╣реИред рдпрд╣ рднреА% 1,% 2, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрдИ рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП #(myfunc(2, %1, 5, %2) x, y -> myfunc(2, x, 5, y) рд▓рд┐рдП рдЖрд╢реБрд▓рд┐рдкрд┐ рд╣реИ

рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрд╣реБрдд рд╣реА рдкрдардиреАрдп рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред

рдКрдкрд░ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░% рдХреЗ рдмрдЬрд╛рдп @malmaud рдХреЗ tilde рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛), рдЖрдк рдХрд░ рд╕рдХрддреЗ рдереЗ

some_obj |> move(~, 4, 5) |> scale(~, 10) |> display

рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдЪрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдПрдХ рдкреНрд░рддреАрдХ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред

рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдФрд░ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗрд╡рд▓ рдореИрдХреНрд░реЛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ~ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╣реИред Scala _ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдо рднреА рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХреМрди рд╕рд╛ рднрд╛рдЧ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

map(f(_,a), v)

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреМрди рд╕рд╛ рд╣реИ?

map(f(x->x,a), v)
map(x->f(x,a), v)
x->map(f(x,a), v)

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

рдареАрдХ рд╣реИ, рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рддрдиреА рджреВрд░ рдЬрд╛рдирд╛ рд╣реИ рдЗрд╕рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдкрд░ред рдХреНрд▓реЙрдЬреБрд░ рдореЗрдВ рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ #(...) рдореЗрдВ рд▓рд┐рдкрдЯреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрд╕рдВрджрд┐рдЧреНрдз рд╣реИред

рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ? рдЬреИрд╕реЗ x, _ = somfunc() рдЕрдЧрд░ somefunc рджреЛ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╣реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдк рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдореИрдХреНрд░реЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

some_obj |> @$(move($, 4, 5)) |> @$(scale($, 10)) |> display

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @$(move($, 4, 5)) рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ x -> move(x, 4, 5) рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рднреА рджреЗрддрд╛ рд╣реИ, рдЬреЛ IMO рдкреНрд░реАрдЯрд┐рдпрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рджреЛрдиреЛрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЗрдиреНрдлрд┐рдХреНрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛрдЧрд╛ред # рекрек реп rule рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдХреЛрдИ рднреА рдирд┐рдпрдо рдореИрдХреНрд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЗрдирдлрд╝рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо @-> рдпрд╛ @|> рдореИрдХреНрд░реЛ рдЬреЛ рдХрд┐ рдереНрд░реЗрдбрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореБрдЭреЗ рдЗрдирдлрд┐рдХреНрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдирдХреНрд▓реЛрдЬрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
some_obj ||> move($,4,5) ||> scale($, 10) |> disp
рдпрд╛ рд╢рд╛рдпрдж |> рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдо рд╣реИ рдХрд┐
x |> f рдирд┐рд╣рд┐рддрд╛рд░реНрде x |> f($) рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
some_obj |> scale($,10) |> disp

рджреЛрд╕реНрддреЛрдВ, рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИ: |>>>>
рдЕрдм рддрдХ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдКрдкрд░ рдЬрд┐рди рдЪреАрдЬреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд╡реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрддрдиреА рд╕реБрдВрджрд░ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИрдВред

рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдмрд╛рдд рд╣реИ - рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ рдЬреИрд╕реЗ: ::,:, <<, >> + :: рдФрд░ рдЗрддрдиреЗ рдкрд░ - рдпрд╣ рд╕рд┐рд░реНрдл рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдмрджрд╕реВрд░рдд рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХреЗ рд▓рд┐рдП рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИред рднрд╛рд╖рд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдПрдВрдЯреЛрдиред рдпрджрд┐ рдЖрдкрдиреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдпрд╛ рддреЛ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдирд┐рд░реНрджрдпреА рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рд╣рд╛рдБ - рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдЖрд▓реЛрдЪрдХ
рдмреЗрдХрд╛рд░ рд╣реИрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдирд╣реАрдВ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рдирд╣реАрдВ рд╣реВрдВ
рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдирд╛ рд╣реИ ... рдареАрдХ рд╣реИ, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░
рд╡рд╕реНрддреБрдУрдВ рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИред

рдореБрдЭреЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг" рдкрд╕рдВрдж рд╣реИ - рдпрд╣ рдорддрд▓рд╛рдм рдХреЗ рдмреАрдорд╛рд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╡реНрдп рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рднрд╛рд╖рд╛ рдореЗрдВ рдЪреЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ - рдпрд╛ рддреЛ OO рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ . рдмрд╛рд░-рдмрд╛рд░ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рд╕реЗ, рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ (рд╣рд╛рд╕реНрдХреЗрд▓, рд╕реНрдХрд╛рд▓рд╛, рдореИрдереЗрдореЗрдЯрд┐рдХрд╛, рдЖрджрд┐)ред рдЙрди рдмрд╛рдж рдХреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╣реИред

рдореИрдВ рд╕реНрдкреЗрдВрд╕рд░ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ - x |> f(a) f(x, a) рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╣реБрдд рд╣реА do рдмреНрд▓реЙрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╖рдп рдХреЛ рдкреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реИ)ред x |> f рдХреЛ рддрдм x |> f() рд▓рд┐рдП рд╢реЙрд░реНрдЯ-рд╣реИрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдХрд┐рд╕реА рднреА рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрди рдмрд╣реБрд╕рдВрдЦреНрдп рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдо рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ, рдФрд░ рдореМрдЬреВрджрд╛ рдЬреВрд▓рд┐рдпрд╛ рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ I / O рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдпрд╛ рдЕрдиреНрдп рдХрд╕реНрдЯрдо рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП |> рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред

рдмрд╕ рдзреНрдпрд╛рди рджреЗрдВ, . рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдмрд╛рдИрдВ рдУрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд░рдирд╛ рд╣реИред

рд╕рдорд╛рди рд░реВрдк рд╕реЗ, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА |> рд╕рд╛рде рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдПрди рдХреЗ рддрд░реНрдХ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ 1 рддрд░реНрдХ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдПрди -1 рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрджрд┐ рдЖрдк _want_ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдирд╛ рдЬреЛ рддрд░реНрдХ рднрд░рд╛рдИ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХреЗ, рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

@JeffBezanson , рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╡рд╣рд╛рдБ infix рдореИрдХреНрд░реЛрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдерд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡реИрдЪрд╛рд░рд┐рдХ рдореБрджреНрджрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, ~ рдХреЛ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рд╡рд╣ рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдФрд░ рдХреЙрд▓реНрд╕ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдореИрдХреНрд░реЛ @~ ред |> рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдореЗрдВ, рдХреЛрдИ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП <| рдорд╛рдВрдЧреЗрдЧрд╛ ...

рдЧреБрд░реБрд╡рд╛рд░, 6 рдлрд░рд╡рд░реА 2014 рдХреЛ, рд╕реНрдкреЗрдВрд╕рд░ рд░рд╕реЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдмрд╕ рдзреНрдпрд╛рди рджреЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рдлрдВрдХреНрд╢рди рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ
рд╕рдВрд╢реЛрдзрд┐рдд, рдЬреЛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрд░рдирд╛ рд╣реИ
рдЬрд╛рдирдмреВрдЭ рдХрд░ред

рдЖрдорддреМрд░ рдкрд░, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЗрд╡рд▓рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рдЗрдирд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рд╕рдорд╛рд░реЛрд╣ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрди рддрд░реНрдХреЛрдВ рдХреЗ рдЙрдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ |
N-1 рддрд░реНрдХ рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░ 1 рддрд░реНрдХ рдореЗрдВ рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрджрд┐ рдЖрдкрдХреЛ _want_ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрд░реНрдЧ рдХреА рдЪрд░ рд╕рдВрдЦреНрдпрд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рддрд░реНрдХ рднрд░рд╛рдИ рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред

@JeffBezanson https://github.com/JeffBezanson , рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣
рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╡рд╣рд╛рдБ infix рдореИрдХреНрд░реЛрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдерд╛ред рдХреНрдпрд╛ рдЖрдк
рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рдореБрджреНрджрд╛ рд╣реИ, рдпрд╛ рдЕрднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ Gi tHubhttps: //github.com/JuliaLang/julia/issues/5571#issuecomment -34374347 рдкрд░ рджреЗрдЦреЗрдВ
ред

рдареАрдХ рд╣реИ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛред рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪрд░ рддрд░реНрдХреЛрдВ рдХреА рд╕реАрдорд╛ рднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдирд╛рдЙрдВрд╕рдореЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рдХрд╛рд░ рд╣реИрдВред

function move(obj::MyType, x, y, args...)
    # do stuff
    obj
end

move(args...) = obj::MyType -> move(obj, args...)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ @composable рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ 2 рдбреА рдШреЛрд╖рдгрд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧрд╛ред

рдЗрдирдлрд╝рд┐рдХреНрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ рдЗрдиреНрдлрд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ # 4498 рдореЗрдВ рдХреА рдЧрдИ рд╣реИред

рдЬреВрд▓рд┐рдпрд╛ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпреЛрдВ рд╣реИрдВ? рдореИрдВ рдЙрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдХрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВ? рдЙрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рдкреАрдЫреЗ рдХреМрди рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИрдВ?

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП @meglio рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╕реНрдерд╛рди рд╣реИ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдпрд╛ StackOverflow julia-lang рдЯреИрдЧред рд╕реНрдЯреАрдлрди рдХреА рдмрд╛рддрдЪреАрдд рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЗрд╡ рд╕реВрдЪреА рджреЗрдЦреЗрдВред

рдмрд╕ рдореЗрд░реЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд╣рдЬ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ
рдХреНрд▓реЛрдЬрд░ рдХреЗ as-> рдореИрдХреНрд░реЛ рдХреЗ рд╕рдорд╛рди, рдЖрдк рдЬреЛ рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдХреНрд░рдо рдореЗрдВ рдкрд┐рдЫрд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпред рддреЛ рдпрд╣:

<strong i="8">@as</strong> _ begin
    3+3
    f(_,y)
    g(_) * h(_,z)
end

рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

g(f(3+3,y)) * h(f(3+3,y),z)

рдЖрдк рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЫреЗрдж рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реА рдкрдВрдХреНрддрд┐ "рдбреНрд░реЙрдк рдбрд╛рдЙрди" рдкрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдлрд╛рдЗрдирд▓ рд╡реАрдХ рд╢рд┐рдерд┐рд▓рддрд╛ рдХреЗ рдПрдХ рдмрд╛рдЙрдЯ рдореЗрдВ рдкрд┐рдЫрд▓реА рддрд┐рдорд╛рд╣реА рдХреА рддрд░рд╣ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реНрдХреЗрдЪрд┐рдВрдЧ рд╢реБрд░реВ рдХреАред

рд╣рдо |> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдСрдиреНрд▓рд╛рдЗрдирд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<strong i="19">@as</strong> _ 3+3 |> f(_,y) |> g(_) * h(_,z)

@porterjamesj , рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ!

рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ; рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЖрдХрд░реНрд╖рдХ рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рд╣реИред
рдлрд░рд╡рд░реА 7, 2014 3:19 PM рдкрд░, "рдХреЗрд╡рд┐рди рд╕реНрдХреНрд╡реЙрдпрд░" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@porterjamesj https://github.com/porterjamesj , рдореБрдЭреЗ рд╡рд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ!

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ Gi tHubhttps: //github.com/JuliaLang/julia/issues/5571#issuecomment -34497703 рдкрд░ рджреЗрдЦреЗрдВ
ред

рдореБрдЭреЗ @porterjamesj рдХрд╛ рд╡рд┐рдЪрд╛рд░ рди рдХреЗрд╡рд▓ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрд╛рдЬреА рд╣рд╡рд╛ рдХреА рдПрдХ рд╕рд╛рдВрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд╛рджреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдордзреНрдпрд╡рд░реНрддреА рдЪрд░ рдХреА рдкрд╕рдВрдж рдХрд╛ рдореБрдлреНрдд рд╢рд╛рд╕рди рд╣реИ, рдФрд░ рдпрд╣ рднреА рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднрд╛рд╖рд╛ рдореЗрдВ рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдпрд╛ рд╡рд┐рд╢реЗрд╖-рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо obj.method(args...) рдкреИрдЯрд░реНрди рдХреЗ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп method(obj, args...) рдкреИрдЯрд░реНрди рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдзрд┐ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдпред (рдЬреЛ jQuery рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╢рд╛рдирджрд╛рд░ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмреАрдЪ "рдкрд╛рдЗрдк" рд╕реЗрдЯрдЕрдк рд╣реЛрдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдХреЗ -> рдФрд░ ->> рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдФрд░ рдХрд╛рдлреА рдЖрдо рд╣реИрдВ, рд╣рдо рд╢рд╛рдпрдж рдЙрди рд╕реБрдВрджрд░ рдХреЛ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рдП рдпрд╣ рд╕рд╡рд╛рд▓ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рд╣реИред рд╢рд╛рдпрдж @threadfirst рдФрд░ @threadlast ?

рдореБрдЭреЗ рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рднреА рдкрд╕рдВрдж рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╡рд┐рд╕реНрддрд╛рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ

tmp = 3+3; tmp = f(tmp); return h(tmp, z)

рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЙрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП? (рд╢рд╛рдпрдж рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА @porterjamesj рдХреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдерд╛)

рдПрдХ рдФрд░ рд╕реБрдЭрд╛рд╡: рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдХреНрд░реЛ рд╢реЙрд░реНрдЯрдХрдЯ f рд╕реЗ f(_) рдФрд░ f(y) f(_,y) ? рд╢рд╛рдпрдж рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╣реА рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ ... (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢реЙрд░реНрдЯрдХрдЯреНрд╕ рдХреЛ рдХреЗрд╡рд▓ рдЕрдХреЗрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ g(_) * h(_,z) рдЬреИрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдкрд░ред

рдХрдИ рдХреЙрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @cdsousa рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред рдХреНрд▓реЛрдЬрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЪрд▓реЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ let рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред

рддреЛ рдХреНрдпрд╛ рд▓рд╛рдЗрди рдмреНрд░реЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ @as рдореИрдХреНрд░реЛ рдФрд░ рд╕реНрдкреНрд▓рд┐рдЯ рдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ => рд╣реИ, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

let рдкреНрд░рджрд░реНрд╢рди рдЕрдЪреНрдЫрд╛ рд╣реИ; рдЕрдм рдпрд╣ рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рдПрдХ рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдЕрдиреНрдпрдерд╛ рднреАред

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

@ рдХрдбрд╕реЛрд░рд╛ :

рдПрдХ рдФрд░ рд╕реБрдЭрд╛рд╡: рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдХреНрд░реЛ рд╢реЙрд░реНрдЯрдХрдЯ f рд╕реЗ f(_) рдФрд░ f(y) f(_,y)

f рд╕реЗ f(_) рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ рд╕реНрдерд╛рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдЪрд┐рдд рд▓реЛрдЧ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ f(_,y) рдпрд╛ f(y,_) рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдХреЗ -> рдФрд░ ->> рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдФрд░ рдХрд╛рдлреА рдЖрдо рд╣реИрдВ, рд╣рдо рд╢рд╛рдпрдж рдЙрди рд╕реБрдВрджрд░ рдХреЛ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рдП рдпрд╣ рд╕рд╡рд╛рд▓ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рд╣реИред рд╢рд╛рдпрдж @threadfirst рдФрд░ @threadlast ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ f(_,y...) рдпрд╛ f(y..., _) рд╕рд╛рде рд╕реНрдерд╛рди рдХреА рдЦреЛрдЬ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдб рдХреЛ рдХрд╛рдлреА рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ (рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ) рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдХреНрд░реЛ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдб рдХреЛ рдХрдо рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдЧрд╛ред

рддреЛ рдХреНрдпрд╛ рд▓рд╛рдЗрди рдмреНрд░реЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ @as рдореИрдХреНрд░реЛ рд╣реИ рдФрд░ рд╕реНрдкреНрд▓рд┐рдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ => рд╣реИ, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд╛рдЬрди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ |> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдмрд╕ рдЗрддрдирд╛ рдкрддрд╛ рд╣реИ рдХрд┐, Lazy.jl рдореЗрдВ рдереНрд░реЗрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛ рдХрд╛

@>> range() map(x->x^2) filter(iseven)

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

рдореИрдВ рднреА Lazy.jl рдореЗрдВ @as> рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛред Lazy.jl рдХреЗ рдкрд╛рд╕ рдЕрдм @as рдореИрдХреНрд░реЛ рднреА рд╣реИред

рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) Monads.jl рдХреЗ рд╕рд╛рде (рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдЬреВрд▓рд┐рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рддрд░реНрдХ рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдореА рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

Lazy.jl рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреИрдХреЗрдЬ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЖрдзрд╛рд░ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдХрд╛рд░рдг рд╣реИ?

рдХрдИ рдорд╛рдиреЛрдВ рдХреЛ рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреА?
рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ:

function foo(a,b)
    a+b, a*b   # x,y respectively
end

рдФрд░ bar(x,z,y) = x * z - y рд╣реЛ?

рдХреНрдпрд╛ рдЗрд╕реЗ bar(_1,z,_2) рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА?

рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдлреЗрдВрдХрдирд╛:

data = [2.255, 3.755, 6.888, 7.999, 9.001]

рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рд╛рдл рддрд░реАрдХрд╛: log(sum(round(data))) data|>round|>sum|>log
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЖрдзрд╛рд░ 2 рд▓реЙрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдФрд░ 3 рджрд╢рдорд▓рд╡ рддрдХ рдЧреЛрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ,
рддрдм: рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
log(2,sum(round(data,3)))

рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:
data|>round(_,3)|>sum|>log(2,_)
(рдпрд╛ рдЗрд╕реА рдХреЗ рд╕рдорд╛рди)

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
https://github.com/oxinabox/Pipe.jl

рдпрд╣ @ рд╕рдореВрд╣ рдХреА рдмрд╛рдд рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣ рддрд░реНрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рднреА рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ

рдпрд╣ @ рд╡рди-рдорд┐рдирдЯреНрд╕ рдХреЗ рдЖрд▓рд╕реА .jl рдереНрд░реЗрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдкрдардиреАрдпрддрд╛ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж) рдХреЗ рд▓рд┐рдП |> рдкреНрд░рддреАрдХ рд░рдЦрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдПрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдмрдирд╛рдКрдВрдЧрд╛, рд╢рд╛рдпрдж, рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░

рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ:

data |>   x -> round(x,2)  |> sum |>  x -> log(2,x)

рд╣рд╛рд▓рд╛рдВрдХрд┐ log(2,sum(round(data,2))) рдпрд╣ рдиреЛрдЯреЗрд╢рди рдХрднреА-рдХрднреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

@ рд╢рд╢рд┐ рдЬреЛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛,
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдардиреАрдп рд╣реЛрдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИ

https://github.com/oxinabox/Pipe.jl рдЕрдм @gregid рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрджреНрдпрдкрд┐ рдпрджрд┐ рдЖрдк рджреЛрдиреЛрдВ _[1] рдФрд░ _[2] рдорд╛рдБрдЧрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдмрд╕рдЯреНрд░реЗрд╢рди рдореЗрдВ рдХрдИ рдХреЙрд▓ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ
рдЬреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рд╡рд╣ рд╕рдмрд╕реЗ рд╡рд╛рдВрдЫрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдПрдХ рдмрд╛рд╣рд░реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕рдХреЗ рдПрдл # рдЙрдкрдЪрд╛рд░ рдХреЛ рдЕрдкрдирд╛рдиреЗ рд╕реЗ рд▓рд╛рдн рд╣реЛрдЧрд╛ред
рджреА, F # рдХреА рдХрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЬрд╛рджреВ рд╢рд╛рдпрдж рдкрд┐рдЫрд▓реЗ рдЫреЛрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕реЗ, рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдФрд░ рдХреЛрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдирд╣реАрдВред

рдпрд╣ рд╣реЛрдЧрд╛ [1:10] |> map(e -> e^2) рдореЗрдВ рдкрд░рд┐рдгрд╛рдо [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ред

рдкреАрдЫреЗ рджреЗрдЦрддреЗ рд╣реБрдП, @ssfrr рдиреЗ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ , рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ obj рддрд░реНрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ map рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред

рдЖрдк рдХреНрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ?

5 рдЬреВрди 2015 рдХреЛ, 5:22 рдмрдЬреЗ, H-225 рд╕реВрдЪрдирд╛рдПрдБ @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:

рдПрдХ рдмрд╛рд╣рд░реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдПрдл # рдЙрдкрдЪрд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рджреА, F # рдХреА рдХрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЬрд╛рджреВ рд╢рд╛рдпрдж рдкрд┐рдЫрд▓реЗ рдЫреЛрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕реЗ, рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдФрд░ рдХреЛрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдирд╣реАрдВред

рдЗрд╕рд╕реЗ [рез:резреж] |> рдирдХреНрд╢рд╛ (e -> e ^ реи) рдкрд░рд┐рдгрд╛рдо [рез, рек, реп, резрем, реирел, рейрем, рек реп, ремрек, 10рез, резрежреж] рд╣реЛрдЧрд╛ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рднреА рдмрд┐рдирд╛ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╣реИред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдИ рднреА рдкрд░рд┐рдгрд╛рдо = рдирдХреНрд╢рд╛ (sqr, [1:10]) рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдХреНрдпреЛрдВ рд╣реИ?
рд╢рд╛рдпрдж рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

@StefanKarpinski
рдореВрд▓ рд░реВрдк рд╕реЗ, рдСрдкрд░реЗрдЯрд░ рдХрд╛рдо рдХреА рддрд░рд╣ рд╣реИ:

  • x |> y(f) = y(x, f)
  • x |> y(f) = y(f, x)

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

рдХреНрдпрд╛ рдпрд╣ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╣реИ?

Lazy.jl рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреИрдХреЗрдЬ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЖрдзрд╛рд░ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдХрд╛рд░рдг рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рд╣реИред

рдЖрдзрд╛рд░ рдореЗрдВ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд╛рд░рдг 2 рдЧреБрдирд╛ рд╣реИ:

1.) рд╣рдо рдЬреВрд▓рд┐рдпрди рд╡реЗ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ
2.) Lazy.jl, FunctionalData.jl, рдФрд░ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкрд╛рдЗрдк.jl рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдХреНрд░реЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЙрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЙрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рдЗрд╕реЗ рдХрдо рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рдЗрдиреНрдлрд┐рдХреНрд╕ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ |> рдЗрд╕ рддрд░рд╣ред

рдореИрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ |>, (рдпрд╛ рдЙрдирдХреЗ рдЪрдЪреЗрд░реЗ рднрд╛рдИ рдХреЛ рдмреНрд▓реЙрдХ) рд╕рднреА рдХреЛрд░ рдореЗрдВ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЙрдкрдХрд░рдг рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред

рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред рдХреНрдпрд╛ рдмрд╕ рдЖрдзрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА x |> y(f) = y(f, x) рд╣рд┐рд╕реНрд╕рд╛, рдЬреЛ Lazy.j, FunctionalData.jl, рдФрд░ рдкрд╛рдЗрдк.jl рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? : +1:

рдкреИрдХреЗрдЬ рдореЗрдВ рдЗрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрдкрдардиреАрдп рдФрд░ рдмрд╣реБрдд рдЕрди-рдЬреВрд▓рд┐рдпрди рдкрд╛рддрд╛ рд╣реВрдВред рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреА рджрдВрдб рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдмрд╛рдХреА рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдЦрдбрд╝рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдб рдпрд╛ рддреЛ рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреАрдЫреЗ-рдмрд╛рд╣рд░ рджрд┐рдЦрддрд╛ рд╣реИред рдХреНрдпреЛрдВ рди рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдмрд╕ рдЬрд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рди рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реЗрдВ?

@tkelman
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВред
рджреА, рд╢рд╛рдпрдж рдЕрдЧрд░ рдЖрдк рдХреБрдЫ рд╕рд░рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдШреБрдорд╛рд╡рджрд╛рд░ рд╣реИ, (рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░: рдбреЗрдЯрд╛ рд╣реЗрд░рдлреЗрд░ рдЬреИрд╕реЗ)ред рддрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪрдордХрддрд╛ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ; рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рддреЛ рдпрд╣ _would_ рдЕрдзрд┐рдХ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [рдЬрдЯрд┐рд▓] рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреА, рдЖрдкрдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди, IMHO, |> рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдордЭ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред

@tkelman рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЙрд╕ рд╢реИрд▓реА рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк рдмреЗрд╕ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╢реИрд▓реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдкрд╕рдВрджреАрджрд╛ рд╢реИрд▓реА _their_ рдЬреВрд▓рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдХреНрдпрд╛ рдЬреВрд▓рд┐рдпрдВрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реБрдХреНрдо рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдиреНрдпрдерд╛ рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рд╛рднрдХрд╛рд░реА рдкрд╛рддреЗ рд╣реИрдВ?
рдореИрдВрдиреЗ рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рд╕рд╛рде рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдкрд╛рдЗрдкрд┐рдВрдЧ рд╕рд╛рдорд╛рди рдкрд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдХрднреА рднреА рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рд╕рдВрджреЗрд╣ рдХрд╛ рд▓рд╛рдн рджреЗрддрд╛ рд╣реВрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рдЗрдкрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ |> , рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рдмрд╣реБрдд рдзреАрдорд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реАрдорд╛рдПрдВ рд╣реИрдВред

рдкрд╛рдЗрдкрд┐рдВрдЧ рдПрдХ рдпреВрдирд┐рдХреНрд╕ рдЦреЛрд▓ рдореЗрдВ рдорд╣рд╛рди рд╣реИ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд╛рда рдФрд░ рдкрд╛рда рдХреЛ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрдИ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЙрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ MIMO рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдпрд╛ DSL рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рд╕рдорд░реНрдерди рдЖрдорддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореИрдХреНрд░реЛрдЬрд╝ рд╣реИрдВред

рдареАрдХ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ @oxinabox рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛:

рд▓реЗрдХрд┐рди рдЙрдкрдХрд░рдг рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реАрдорд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдкрд╣рд▓реЗ рдХреЗ рдХреБрдЫ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рд╕рдВрднрд╡рддрдГ |> рдкрд╛рд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХред |> рдкреВрд░реНрд╡ рдХрдорд╛рдВрдб-рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, 0.5-рджреЗрд╡ рдЖрдПрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЪреБрдирд╛рд╡ рдореБрдЭреЗ ~ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреА рдХрд╛рдлреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд▓рддреА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХрд╣реАрдВ рдФрд░ рдмрддрд╛рдИ рд╣реИред

рдкрд╛рд░реНрд╕рд┐рдВрдЧ ~ рдХреЗрд╡рд▓ рдкрд╛рдЧрд▓ рд╣реИ, рдпрд╣ рдЖрдзрд╛рд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред _ , _1 , _2 , _more рдФрд░ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк рдЙрдард╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпреЗ рдЪрд░ рджрд╛рдпрд░реЗ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред рдлрд┐рд░ рднреА рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЕрдирд╛рдо рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ ...

рд▓рд╛рдЧреВ рдХрд░рдХреЗ |>> рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ

рдЬрдм рддрдХ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ!

рдкрд╛рд░реНрд╕рд┐рдВрдЧ ~ рдХреЗрд╡рд▓ рдкрд╛рдЧрд▓ рд╣реИ, рдпрд╣ рдЖрдзрд╛рд░ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ

рдпрд╣ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рд╡рд░реНрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд░ рдСрдкрд░реЗрдЯрд░ рд╣реИред Infix рдмрд╛рдЗрдирд░реА ~ рдкрд╛рд░рд╕ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ, рд░реЗрдлрд░реА https://github.com/JuliaLang/julia/issues/4882 , рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕реНрд╕реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдПрдХ рдЕрдЬреАрдм рдЙрдкрдпреЛрдЧ рд╣реИ (https://github.com/) JuliaLang / рдЬреВрд▓рд┐рдпрд╛ / рдкреБрд▓ / 11102 # issuecomment-98,477,891)ред

@tkelman

рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ MIMO рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

3 рд╕рд┐рдВрдЯреЗрдХреНрд╕ред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ред
рдореЗрдВ рдкрд╛рдЗрдк, рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдФрд░ Do-blockред
рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рднреА 4, рдмрд╣рд╕ рдпреЛрдЧреНрдпред


рдореЗрд░реЗ рд▓рд┐рдП,
рд░реАрдбрдСрд░реНрдбрд░ (рдпрд╛рдиреА рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ) == SISO рдлрд╝рдВрдХреНрд╢рди рдЪреЗрди рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрд░реНрдбрд░, рдмрдирд╛рддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдореИрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХрд░рддрд╛ рд╣реВрдБ рдЬреИрд╕реЗ (iterators.jl, рдФрд░ pip.jl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

  • loaddata(filename) |> filter(s-> 2<=length(s)<=15, _) |> take!(150,_) |> map(eval_embedding, _)
  • results |> get_error_rate(desired_results, _) |> round(_,2)

SISO рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ (рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж рдХреЗ рд▓рд┐рдП), MIMO рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рд╣реИред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд╕рд╣реА рддрд░реАрдХреЗ рддрдп рдХрд░ рд░рд╣реА рд╣реИрдВред
рдЬреЛ рдореИрдВ 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рд╡рд╣ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдореБрдЦреНрдп рднрд╛рд╖рд╛ рд╕реЗ рд╣рдЯрдХрд░ рдкрд╛рдЗрдк рдФрд░ рдбреВ рдмреНрд▓реЙрдХ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

Do-block рдореЗрдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╣рдореЗрд╢рд╛ рдХрдИ рдкреНрд░реЗрд╖рдг рджрд░реНрд╢рди (рдФрд░ рди рд╣реА рдкрдВрдбреЛрдВ / рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╕рд╣реА рд╣реЛрдЧрд╛) D рд╢реИрд▓реА UFCS data.map(f).sum() , рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдИ рдкреНрд░реЗрд╖рдг рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдкрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╡рддрдГ рдмрд╣реБрдд рдЬрд▓реНрдж рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рдкрд╛рдЗрдк рдХреА рддрд░рд╣ DSL рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд╕рд╣реА рддрд░реАрдХреЗ рддрдп рдХрд░ рд░рд╣реА рд╣реИрдВред
рдЬреЛ рдореИрдВ 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рд╡рд╣ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред

рдпрд╣ рдЗрд╕ рд╕рд╡рд╛рд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕рдореБрджрд╛рдп-рд╡реНрдпрд╛рдкреА рд╢реИрд▓реА рдЧрд╛рдЗрдб рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЕрдм рддрдХ рд╣рдордиреЗ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреИрдХреЗрдЬ рдЕрдВрддрд░, рд╕реНрдерд┐рд░рддрд╛, рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрдврд╝рддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдореБрджрд╛рдп рдмрдврд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВ рдЬреЛ рдХрднреА рдЖрдкрдХрд╛ рдХреЛрдб рдкрдврд╝реЗрдВрдЧреЗ, рддреЛ рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдПрдВ рдФрд░ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░реЗрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрдХрд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ (рдЖрдкрдХреА рдЕрдкрдиреА рд░рд╛рдп рдореЗрдВ) рдкрдардиреАрдпрддрд╛ рдХрд╛ рдореВрд▓реНрдп рд╣реИред

@tkelman @oxinabox
рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдирд╣реАрдВ рдорд┐рд▓ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдХреЛрд░" рдкреИрдХреЗрдЬ рдореЗрдВред [рдЙрджрд╛: рдЖрдзрд╛рд░]
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ |> рдПрдХ рдореИрдХреНрд░реЛ рдХрд╛ рдЬрд╡рд╛рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдЫ _рд▓реЛ_ рдпрд╣ рд╢рд╛рдпрдж? (рдореИрдВ рдПрдХ рдорд╛рд╕реНрдЯрд░ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдирд╣реАрдВ рд╣реВрдБ!)

macro (|>) (x, y::Union(Symbol, Expr))
    if isa(y, Symbol)
        y = Expr(:call, y) # assumes y is callable
    end
    push!(y.args, x)
    return eval(y)
end

рдЬреВрд▓рд┐рдпрд╛ v0.3.9 рдХреЗ рддрд╣рдд, рдореИрдВ рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ - рдПрдХ рдмрд╛рд░ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде, рдФрд░ рдПрдХ рдмрд╛рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде; рдореЗрд░реА [рд╕реАрдорд┐рдд] Union рдХреА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рд╣рд┐рдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЦрд┐рд▓реМрдирд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрдЧрд╛ред

рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, log(2, 10) рдХреЗ рдмрд░рд╛рдмрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ @|> 10 log(2) рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдпрд╣рд╛рдБ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред
рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдлрд╝рдВрдХреНрд╢рди / рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ "рдЕрдЪреВрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: 10 |> log(2) ред (рд╕рд╣реА рд╣реИ рддреЛ рдЧрд▓рдд!)
рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛, рдореБрдЭреЗ рдкрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рдПрдХ рдЕрдЪреНрдЫреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рднреА рдирд╣реАрдВ рд╕рдХрддрд╛! =)

рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ ...
рдЗрд╕рд▓рд┐рдП рдЬреИрд╕реЗ:

julia> for e in ([1:10], [11:20] |> zip) println(e) end
(1,11)
(2,12)
(3,13)
(4,14)
(5,15)
(6,16)
(7,17)
(8,18)
(9,19)
(10,20)

рдлрд┐рд░ рд╕реЗ - рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдмрд╛рдд рдорд┐рд▓ рдЬрд╛рдПрдЧреА!
рдореИрдВрдиреЗ рдХреБрдЫ рдлрд╝рд┐рджрд▓рд┐рдВрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдерд╛рд╣ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдореИрдВ рдЦреБрджред

рдХреГрдкрдпрд╛ https://github.com/JuliaLang/julia/issues/554#issuecomment -110091527 рдФрд░ # 11608 рджреЗрдЦреЗрдВред

9 рдЬреВрди 2015 рдХреЛ рд░рд╛рдд 9:37 рдмрдЬреЗ, H-225 рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдорд╛рдирд╕рд┐рдХ рд░реБрдЦ рд╣реИред рд╕рд╡рд╛рд▓ "рдХреНрдпреЛрдВ?" рдмрдЬрд╛рдп "рдХреНрдпреЛрдВ рдирд╣реАрдВ?" рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЗрд╕рдХреЗ рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдХрд╛рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рдВрдмрд╛ рдФрд░ рдХрдард┐рди рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рд╣реИ? рдХреНрдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдПрдХ рднрд┐рдиреНрди рд░реВрдк рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реЛрдЧрд╛? рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдХреНрдпреЛрдВ рдирд╣реАрдВ?" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рдФрдЪрд┐рддреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИрдВред

рд╕рд╡рд╛рд▓ "рдХреНрдпреЛрдВ?" рдмрдЬрд╛рдп "рдХреНрдпреЛрдВ рдирд╣реАрдВ?"

+ 1_000_000

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред
рджреЗрдЦрд┐рдпреЗ рдпрд╣ рдмрд╣реБрдЪрд░реНрдЪрд┐рдд рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ :
рд╣рд░ рд╕реБрд╡рд┐рдзрд╛ -100 рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
рдЗрд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

FWIW, Pyret (http://www.pyret.org/) рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдЯреАрдХ рдЪрд░реНрдЪрд╛ рд╕реЗ рдЧреБрдЬрд░рд╛ред рднрд╛рд╖рд╛ рдПрдХ "рдХреИрдиреНрдпрдирдмреЙрд▓" рд╕рдВрдХреЗрддрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЛрдЧ |> рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред Pyret рдореЗрдВ,

[list: 1, 2, 3, 5] ^ map(add-one) ^ filter(is-prime) ^ sum() ^ ...

рдЗрд╕рд▓рд┐рдП, рддреЛрдк рдХреЗ рдЧреЛрд▓реЗ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддрд╛рд░рд╛ рдЧрдпрд╛ред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╡реЗ рддрдп рдХрд░рддреЗ рдХрд┐ рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрд╣реБрдд рднреНрд░рд╛рдордХ рдерд╛, рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛ред sum() рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдЕрдВрдд рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕реБрдВрджрд░ рдХрд░реА рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛:

[list: 1, 2, 3, 5] ^ map(_, add-one) ^ filter(_, is-prime) ^ sum() ^ ...

рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реИ рдФрд░ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП ^ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдВ, рдпрд╣ рдореБрдЭреЗ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдХрд░реАрдиреЗ рд╕реЗ рднреА рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрддрд╛ рд╣реИред

@StefanKarpinski рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ рддреЛ рдЬрдВрдЬреАрд░ (рдХрд░реАрдиреЗ рд╕реЗ рдирд╣реАрдВ)? рд╕рдм рдХреЗ рдмрд╛рдж Pyret рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдХрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рдЬреЛ рдХрд┐ рдЬрдВрдЬреАрд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо |> рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ | рдФрд░ > рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ), рд╣рдо рдХреБрдЫ рд▓рдЪреАрд▓рд╛ рдФрд░ рдкрдардиреАрдп рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛

foo(x,y) = (y,x)
bar(x,y) = x*y

рд╣рдо рд╣реЛрдВрдЧреЗ:

randint(10) |_> log(_,2) |> sum 
(1,2) |_,x>  foo(_,x)   |x,_>   bar(_,2) |_> round(_, 2) |> sum |_> log(_, 2)

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ |a,b,c,d> рдЬрд╣рд╛рдВ a , b , c рдФрд░ d рдХрд╛ рд▓реМрдЯрд╛ рд╣реБрдЖ рдорд╛рди рдорд┐рд▓реЗред рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдХреНрд░рдо рдореЗрдВ) рдФрд░ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдПрдХ рдХреЗ рдЕрдВрджрд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрджрд┐ |> рдЕрдВрджрд░ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рдирдпрд╛ рд╕реНрдЯрд╛рд░рдбрд╛рд░реНрдб рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: f(x) |> g(_, 1) рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ f(x) рдФрд░ _ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗрдВрдЧреЗред

@samuela , рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдерд╛ рдХрд┐ рдХрд░реАрдиреЗ рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рдкреАрдЫреЗ рдЪрд▓ рд░рд╣реЗ рддрд░реНрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ _ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЖрдк рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Ie рдиреЗ f(x,y) рдХреЛ рдХрд░реАрдиреЗ рд╕реЗ рджрд┐рдпрд╛, рдЖрдк f(x) рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ y -> f(x,y) , рд▓реЗрдХрд┐рди рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдЖрдк f(x,_) рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ f(_,y) рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП x -> f(x,y) ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ, рдлрд┐рд░ рднреА рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЗ рдХрд┐рд╕реА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЙрддреНрддрд░ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ "рдХреИрдж" рдЖрд╕рдкрд╛рд╕ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХрд┐рддрдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдпрджрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХрдИ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдПрдХ tuple рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ _ рд╕реНрдерд┐рддрд┐? рдпрд╛ рдЗрд╕реЗ рдордХреНрдЦреА рдкрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!

@StefanKarpinski рдЖрд╣, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдорд╛рдирд╛ред

@ ScottPJones рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрддреНрддрд░ ASCII рдХрд▓рд╛ рддреАрд░реЛрдВ рдХреЛ рджреЗрдирд╛ рд╣реИ:
http://scrambledeggsontoast.github.io/2014/09/28/needle-announce/

@simonbyrne рдЬреЛ рдЫрд┐рджреНрд░рд┐рдд рдХрд╛рд░реНрдбреЛрдВ рдкрд░ рдлреЛрд░рдЯреНрд░рд╛рди IV рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рднреА рдмрджрддрд░ рд▓рдЧрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдорд┐рд╕реНрд╕рд┐рдк рдпреВрде рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛! рдмрд╕ рдЕрдЧрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреИрд╕реЗ _1, _2, рдЖрджрд┐ рдХрдИ рд░рд┐рдЯрд░реНрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдореЗрд░реА рдУрд░ рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдмреЗрд╡рдХреВрдл рд╡рд┐рдЪрд╛рд░ рд╣реИ?

@simonbyrne рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореИрдХреНрд░реЛ рдПрдХ рдЕрджреНрднреБрдд GSoC рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрдЧреАред

рд╕рдорди () рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╣рд┐рдд рддрд░реНрдХ рднреА do рд╕рдВрдХреЗрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд╛рд╖рд╛ рдореЗрдВ рдкрдХреЗ рд╣реБрдП рд╣реИ)ред

@simonbyrne рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ (рд╡рд░реНрддрдорд╛рди do рд╕рдВрдХреЗрддрди), рдЕрдЧрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЬрдВрдЬреАрд░ рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@simonbyrne рд╣рд╛рдБ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдБред рдореИрдВ рд╡рд░реНрддрдорд╛рди do рд╕рдВрдХреЗрддрди рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕рдВрдмрдВрдзреА рдЬрд┐рдордирд╛рд╕реНрдЯрд┐рдХ рдХреЛ рд╕рд╣реА рдирд╣реАрдВ рдард╣рд░рд╛рддрд╛ред

@samuela рдирдХреНрд╢реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (f, _) рдмрдирд╛рдо рд╕рд┐рд░реНрдл рдирдХреНрд╢рд╛ (f)ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдЬрд╛рджреВ рдЙрддрд░рдирд╛ рднреНрд░рд╛рдордХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдХреНрд╢рд╛ (рдПрдл) рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рдЪреАрдиреА рдХреЗрд╡рд▓ рдирдХреНрд╢реЗ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред
рдЬреИрд╕реЗ

map(f::Base.Callable) = function(x::Any...) map(f,x...) end

рдпрд╛рдиреА рдореИрдк рдПрдХ рдлрдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдПрдХ рдлрдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрди рдЪреАрдЬреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо)ред

рдЖрдо рддреМрд░ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдУрд░ рдЭреБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд "рд╕реБрд╡рд┐рдзрд╛" рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдмрдЬрд╛рдп рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдореНрдореЗрд▓рди рдХреЗ рдЬреЛ |> рд╣рдореЗрд╢рд╛ рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ (рдпрд╛ рд╕рдорд╛рди) рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рд╣реА рдирд╕ рдореЗрдВ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

type Underscore end
_ = Underscore()

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

рд╡реИрд╕реЗ рднреА, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред

@patrickthebold
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ x |> map(f, _) => x |> map(f, Underscore()) => x |> map(f, x) , рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, map(f, _) , рд╕рд╣реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛? - рдмрд╕ _ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдХрд╛рдИ рд╣реЛ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░реЗрдВрдЧреЗ?

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ - рд╕рдВрднрд╡рддрдГ |> рд╕рд┐рдВрдЯреИрдХреНрд╕-- рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, map рд▓рд┐рдП рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ред рджрд░рдЕрд╕рд▓, рдореМрдЬреВрджрд╛ |> рдЬреЛ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдпрд╣ рдмреЗрд╣рддрд░ рд╕рд░рд▓ рд╣реЛрдЧрд╛ рдмрд╕ рдХрд╛ рд╕реНрд╡рдд: inferencing рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП x |> map(f, _) => x |> map(f, x) рдмрдЬрд╛рдп?

@StefanKarpinski рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред

рдХреБрдЫ рднреА рдирд╣реАрдВ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ |> рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрдЧрд╛ред _ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП < рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

<(_::Underscore, x) = function(z) z < x end
<(x, _::Underscore) = function(z) x < z end

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджрд░реНрдж рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрдЪрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛ред

рдлрд┐рд░, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛ рдкрджреНрдзрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@patrickthebold рдЕрдВрдбрд░рд╕реНрдХреЛрд░, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмреЛрдЭ рдбрд╛рд▓ рджреЗрдЧрд╛ред рд╕рднреА 2 ^ n рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛

f(_, x, y) = ...
f(x, _, y) = ...
f(_, _, y) = ...
...

рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрдЧрд╛, рдЕрдпреЛрдЧреНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, map рд╕рд╛рде рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ map(f) рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ map рдФрд░ filter рдЬреИрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдЙрд╕реА рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ рдореИрдиреБрдЕрд▓ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдореБрджреНрджрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, func_that_has_a_lot_of_args(a, b, c, d, e) рдЖрдкрдХреЛ рд╣рд░ рд╕рдВрднрд╡ "рдХреНрдпреВрд░рд┐рдВрдЧ" рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рднреАрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛

func_that_has_a_lot_of_args(a, b, c, d, e) = ...
func_that_has_a_lot_of_args(b, c, d, e) = ...
func_that_has_a_lot_of_args(a, b, e) = ...
func_that_has_a_lot_of_args(b, d, e) = ...
func_that_has_a_lot_of_args(a, d) = ...
...

рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдиреЗ рдХрд┐рдпрд╛ рдерд╛, рддрдм рднреА рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдПрдХ рдмреЗрддреБрдХреА рд░рд╛рд╢рд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛: рдХреНрдпрд╛ func_that_has_a_lot_of_args(x, y, z) рдЙрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ x=a,y=b,z=c рдпрд╛ x=b,y=d,z=e , рдЖрджрд┐ред ? рдЬреВрд▓рд┐рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдмреАрдЪ рд╡рд┐рдЪрд╛рд░-рд╡рд┐рдорд░реНрд╢ рдХрд░реЗрдВрдЧреЗ рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред

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

@samuela
рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рд▓реИрдореНрдмрдбрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ"? - рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдБред рдореИрдВрдиреЗ рднреА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@patrickthebold
рдУрд╣ рд╕рдордЭрд╛ред рд╕рдВрднрд╡рддрдГ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: filter(_ < 5, [1:10]) => [1:4] ?
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП filter(e -> e < 5, [1:10]) рдЖрд╕рд╛рди рдорд┐рд▓реЗрдЧрд╛; рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд - рдХрдо рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЕрд░реНрде, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рдЕрдиреБрджрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рдпрд╣ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред

рдЬрдм рддрдХ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИ?

@samuela

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреИрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдирдЪрд┐рддреНрд░ (рдЪ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдореИрдиреБрдЕрд▓ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдореБрджреНрджреЗ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ map рдФрд░ filter , рдФрд░ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬрд╣рд╛рдБ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ map рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░реЗрдВред (рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред)

рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрдЧрд╛, рдЕрдпреЛрдЧреНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

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

@ H-225 рд╣рд╛рдБ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЪреАрдЬрд╝ рдХреЗрд╡рд▓ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЙрди рд╕реНрдЯрд╛рдЗрд▓ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

@ H-225 рдЦреИрд░, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдлрдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рд╣реЛрдЧрд╛ред рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп

[1, 2, 3, 5]
  |> x -> map(addone, x)
  |> x -> filter(isprime, x)
  |> sum
  |> x -> 3 * x
  |> ...

рдХреЛрдИ рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ

[1, 2, 3, 5]
  |> map(addone, _)
  |> filter(isprime, _)
  |> sum
  |> 3 * _
  |> ...

рдореИрдВ рдЦреБрдж рдХреЛ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЗрд╕ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдпрд╛ рдХреБрдЫ рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрд╛рддрд╛рд░ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 3.5 рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рдПрдкреНрд░реЛрдЪ рд╣реИрдВ рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдмрд┐рд▓рд┐рди |> рдлрдВрдХреНрд╢рди, рдкрд╛рдЗрдк.рдЬреНрд▓, Lazy.jl рдФрд░ 0.5 рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдмрд┐рд▓рд┐рдпрди do рдЕрдВрдХрди рдЬреЛ рдЖрддреНрдорд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реИред рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдХреЛрд╕рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@samuela рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк FunctionalData.jl рдХреЛ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

<strong i="7">@p</strong> map [1,2,3,4] addone | filter isprime | sum | times 3 _

рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдХреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рдП (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ _ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА!


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдКрдкрд░ рдмрд╕ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:

times(3, sum(filter(map([1,2,3,4],addone), isprime)))

рдЬреЛ Base.map рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп FunctionalData.map рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рддрд░реНрдХ рдХреНрд░рдо рд╣реИ, рджреВрд╕рд░рд╛ рдЕрдВрддрд░ рдЕрдиреБрдХреНрд░рдордг рд╕рдореНрдореЗрд▓рди (рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ) рд╣реИред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмреЗрд╕.рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреНрд░рдо рдХреЛ рдЙрд▓рдЯ рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред @p рдПрдХ рд╕рд░рд▓ рдкреБрдирд░реНрд▓реЗрдЦрди рдирд┐рдпрдо рд╣реИ (рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдЖрдВрддрд░рд┐рдХ-рдмрд╛рд╣рд░реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд░рд▓ рдХрд░реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди: <strong i="17">@p</strong> map data add 10 | showall рдмрди рдЬрд╛рддрд╛ рд╣реИ

showall(map(data, x->add(x,10)))

рд╣реИрдХ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/facebook/hhvm/issues/6455ред рд╡реЗ $$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджреВрд░ рд╣реИ ( $ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИ)ред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдХ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рдкрд╕рдВрдж рд╣реИ, рдореЗрд░рд╛ рдореБрдЦреНрдп рдЖрд░рдХреНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдПрдХ рддрд░рд╣ рдХреЗ рдПрдХ рд▓рдВрдмрд░ рдиреЛрдЯреЗрд╢рди рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ рдЬреЛ рдЪрд░ / рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП _ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпреЗ рд╕рдВрдШрд░реНрд╖ рди рдХрд░реЗрдВред

рдХреНрдпрд╛ рдХреЛрдИ __ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдЖрдк рдЬрд┐рд╕ рд▓реИрдореНрдмрдбрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдХреНрдпрд╛ рд╣реИ? _ -> sqrt(_) ?

рдЬрд╝рд░реВрд░, рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рдЬрд┐рд╕реЗ рддреАрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк map(_ + 2, v) рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХреЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХрд┐рддрдирд╛ _ рд╣реИред

рдХреНрдпрд╛ рдЕрдирд╛рдо рддрд░реНрдХ рдХреЗ рд▓рд┐рдП Mathematica рдХреЗ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реИ? рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╡реЗ рдЙрди рддрд░реНрдХреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ?
Tue, Nov 3, 2015 рдХреЛ 9:09 AM рд╕реНрдЯреАрдлрди рдХрд░рдкрд┐рдВрд╕реНрдХреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛:

рдЬрд╝рд░реВрд░, рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рдЬреЛ
рддреАрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХреЗрдВ
рдирдХреНрд╢рд╛ (_ + 2, v), рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдХрд┐рддрдирд╛ рдЖрд╕рдкрд╛рд╕ рдХрд╛ рд╣реИ
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ _ рдХрд╛ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/5571#issuecomment -153383422ред

https://reference.wolfram.com/language/tutorial/PureFunctions.html , рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ
# рдкреНрд░рддреАрдХ, рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред
Tue, Nov 3, 2015 рдХреЛ рд╕реБрдмрд╣ 9:34 рдмрдЬреЗ рдЬреЛрдирд╛рдерди рдорд╛рд▓рдореМрдж [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпрд╛ рдЕрдирд╛рдо рддрд░реНрдХ рдХреЗ рд▓рд┐рдП Mathematica рдХреЗ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реИ? рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╡реЗ рдЙрди рддрд░реНрдХреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ?
Tue, Nov 3, 2015 рдХреЛ 9:09 AM рд╕реНрдЯреАрдлрди рдХрд░рдкрд┐рдВрд╕реНрдХреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛:

рдЬрд╝рд░реВрд░, рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рдЬреЛ
рддреАрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХреЗрдВ
рдирдХреНрд╢рд╛ (_ + 2, v), рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдХрд┐рддрдирд╛ рдЖрд╕рдкрд╛рд╕ рдХрд╛ рд╣реИ
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ _ рдХрд╛ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/5571#issuecomment -153383422ред

рдЧрдгрд┐рддрдЬреНрдЮ рдЗрд╕реЗ рдкрд░рд┐рд╕реАрдорди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП & рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд▓рдВрдмреЛрджрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЬреЛ рдХрд┐ рдПрдХ рдордирдорд╛рдирд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рд╣рдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдФрд░ рдкреВрд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪрд░ / рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╕реАрдорд╛рдВрдХрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдорд▓реНрдЯреА-рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпреВрд░рд┐рдВрдЧ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЖ рд▓рд╛ рдУрдкрди рдбрд╛рдпрд▓рди рджреЗрдЧрд╛ ред рдХреНрдпреЛрдВрдХрд┐ _ рдкреВрд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдиреНрдпреВрдирддрдо, рд╕рд╣рдЬ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред map(_ + 2, _) x -> map(y -> y + 2, x) рдЕрдиреБрд╡рд╛рдж рд╣реЛрдЧрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреИрд░-рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд▓рдВрдмреВрдлреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж -> рдпрд╛ do рд╡реИрд╕реЗ рднреА рдЕрдзрд┐рдХ рдорд┐рд▓рдирд╕рд╛рд░ рд╣реЛрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдмрдирд╛рдо рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реЛрдЧрд╛ред

@ рдбрд░реНрдХрди , рдЬреЛ рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ - рдХреНрдпрд╛ рдЖрдк рдирд┐рдпрдо рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдкрд╣рд▓реЗ рдХреНрдпреЛрдВ _ рдХреЗ рддрд░реНрдХ рдХреЗ рдЕрдВрджрд░ рд░рд╣рдиреЗ map , рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдПрдХ рдкреВрд░реЗ рдЦрдкрдд map рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐? рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ", рдФрд░ рди рд╣реА "рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪрд░ / рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛" ...

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд┐рдпрдо рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрд╕ рдбрд╛рдпрд▓рди рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ map(_ + 2, v) рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди map(2*_ + 2, v) рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд╣рд╛рдБ рднреА рдмрд╣реБрдд рдирд╛рдИрдкрд┐рдХ рд╡реНрдпрд╡рд╕рд╛рдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ _ + 2 + _ рдХрд╛ рдорддрд▓рдм (x,y) -> x + 2 + y рдЬрдмрдХрд┐ _ тКХ 2 тКХ _ рдХрд╛ рдорддрд▓рдм y -> (x -> x + 2) + y рдХреНрдпреЛрдВрдХрд┐ + рдФрд░ * рдПрдХрдорд╛рддреНрд░ рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпреБрдЧреНрдордХ рд╕рд╣рдпреЛрдЧреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдмрд╣реБ-рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм, рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _parser_ рдХреЛ рдПрдХ рд░рд╛рдп рд╣реЛрдЧреА рдХрд┐ рдХреМрди рд╕реЗ рдСрдкрд░реЗрдЯрд░ рд╕рд╣рдпреЛрдЧреА рд╣реИрдВ рдФрд░ рдЬреЛ рдирд╣реАрдВ рд╣реИрдВ, рдЬреЛ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд░реНрд╕рд░ a + b + c рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓ рдХреБрдЫ рд╕рдВрджрд┐рдЧреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж infix рд╕рдВрдХреЗрддрди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рд╡рд╣ рднреА рдЧрдбрд╝рдмрдбрд╝ рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдЖрдкрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдПрдХ рддрд░рдл, рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рддрд╛рд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рдиреА рджреЗрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рджреЛрд╖ рджреЗрдирд╛ рдХрдард┐рди рд╣реИ)ред рджреВрд╕рд░реА рдУрд░, рдлрдВрдХреНрд╢рди рдХреЙрд▓реНрд╕ рдХреЗ рд▓рдВрдмреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХреНрд╕реЗрд▓ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

2*_ |> 2+_ |> map(_, v)

рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдлрд╝рд┐рдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╕реАрдорд╛рдВрдХрдХ рдореБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛, рдЬреЛ рд╣рд╛рде рдореЗрдВ рдореБрджреНрджреЗ рдХреА рддрд░рд╣ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд╛рдВрдХрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рдореИрдВ рдЙрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП & рдЪреЛрд░реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ):

_ тКХ 2 тКХ _    # y -> (x -> x + 2) + y
_ тКХ 2 тКХ _ &  # (y , x) -> x + 2 + y

рдпрд╣ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдЪрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реВрдВред рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЗрдиреНрдлрд┐рдХреНрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╣рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдЫреЛрдЯреА рдФрд░ рдореАрдареА рдореЗрдордиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд▓рдЪреАрд▓реА рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░реА рдХреЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ, (рдФрд░ рддрдм рднреА рд╣рдо рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд╕рд╛рде рд╡рд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕рд╣реА рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╢реЛрд░ (рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╡рд┐рд░реЛрдз) рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛рдПред

рд╣рд╛рдБ, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рд╕рд┐рд╡рд╛рдп infix рдЪреАрдЬрд╝ рдХреЗред рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЦреИрд░, рдЗрдирдлрд╝рд┐рдХреНрд╕ рдкреЛрдЬрд╝рд┐рд╢рди рдореЗрдВ рдХрд░реАрдиреЗ рд╕реЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:

map(+(*(2, _), 2), v)      # curry is OK syntax, but obviously not what you wanted
map(2*_ + 2, v)            # ERROR: syntax: infix curry requires delimitation
map(2*_ + 2 &, v)          # this means what we want
map(*(2,_) |> +(_,2), v)   # as would this

рдпрд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореБрдЭреЗ рдЕрдиреБрдорд╛рди рд╣реИред

рдЗрд╕ рдХрд░реАрдиреЗ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реБрдП, рдореБрдЭреЗ рднреНрд░рдорд┐рдд рдФрд░ рдЧрд▓рдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░рддрд╛ рд╣реИред

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

рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ:

  • рдпрджрд┐ _ рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреЗрд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЙрддрдиреЗ рд╣реА рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ _ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╢рд░реАрд░ рд╣реИред _ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреНрд░рдо рдореЗрдВ рд▓рдВрдмреЛрджрд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреА рдЧрдИред
  • рдпрджрд┐ _ рдХрд╣реАрдВ рдФрд░ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╕-рдкрд╛рд╕ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рддрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддреАрд░ рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╕реНрддрд░ рдпрд╛ рдХрд┐рд╕реА рднреА рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреЛрд╖реНрдардХ (рд▓реЗрдХрд┐рди рдЪреМрдХреЛрд░ рдХреЛрд╖реНрдардХ рдпрд╛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдирд╣реАрдВ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рддрд░реНрдХ рд╣реИрдВ _ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ _ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдХреНрд░рдо рдореЗрдВ рд▓реИрдореНрдмрдбрд╛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рдеред

рдЙрджрд╛рд╣рд░рдг:

  • f(_, b) тЖТ x -> f(x, b)
  • f(a, _) тЖТ x -> f(a, x)
  • f(_, _) тЖТ (x, y) -> f(x, y)
  • 2_^2 тЖТ x -> 2x^2
  • 2_^_ тЖТ (x, y) -> 2x^y
  • map(_ + 2, v) тЖТ map(x -> x + 2, v)
  • map(2_ + 2, v) тЖТ map(x -> 2x + 2, v)
  • map(abs, _) тЖТ x -> map(abs, x)
  • map(2_ + 2, _) тЖТ x -> map(y -> 2y + 2, x)
  • map(2_ - _, v, w) тЖТ map((x, y) -> 2x - y, v, w)
  • map(2_ - _, v, _) тЖТ x -> map((y, z) -> 2y - z, v, x)
  • map(2_ - _, _, _) тЖТ (x, y) -> map((z, w) -> 2z - w, x, y)
  • _ тЖТ x -> x
  • map(_, v) тЖТ x -> map(x, v)
  • map((_), v) тЖТ map(x -> x, v)
  • f = _ тЖТ f = x -> x
  • f = 2_ тЖТ f = x -> 2x
  • x -> x^_ тЖТ x -> y -> x^y
  • _ && _ тЖТ (x, y) -> x && y
  • !_ && _ тЖТ (x, y) -> !x && y

рдХреЗрд╡рд▓ рдпрд╣реА рд╕реНрдерд╛рди рдкрд╛рд╕рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рд╕рд╢рд░реНрдд - рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрд╕ рдЕрдЬреАрдм рддрд░рд╣ рдХрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рд╣рдж рддрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ рдФрд░ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рдореБрдЭреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЪреАрдиреА рдХреЛ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ "рд▓рд╛рдн" рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдХрдо рдЦреБрд╢ рдХрд░рддреЗ рд╣реИрдВ:

  • 2v[_] тЖТ x -> 2v[x] (рдЕрдЪреНрдЫрд╛)
  • 2f(_) тЖТ 2*(x -> f(x)) (рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ)
  • _ ? "true" : "false" тЖТ (x -> x) ? "true" : "false"
  • _ ? _ : 0 тЖТ (x -> x) ? (y -> y) : 0

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреБрдЫ рдЧрд╣рд░рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ - рд╡рд╛рдХреНрдп-рд░рдЪрдирд╛ рдХреА рдХреБрдЫ рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ _makes sense_ - рдФрд░ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдирд┐рдХрдЯрддрдо рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ "рдЪрд╛рд╣рддрд╛ рд╣реИ" рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рджрд╛рдИрдВ рдУрд░ рдПрдХ рдФрд░ рдЬрдЧрд╣ рд╣реИ рдЬрд┐рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ "рдЪрд╛рд╣рдиреЗ" рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдХрд╣рдирд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИ рдХрд┐ рдХреМрди рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╢рд░реАрд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓реЗ)ред

рд╢рд╛рдпрдж, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдерд╛) рдХрд░реЛ-рдмреНрд▓реЙрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдкреВрд░реЗ рдкрд░, рдмрд╣реБрдд рд╕рдлрд▓ рдФрд░ рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рднреА рдЕрднреВрддрдкреВрд░реНрд╡ рдирд╣реАрдВ рд╣реИ - рд╕реНрдХрд╛рд▓рд╛ рдЗрд╕реА рддрд░рд╣ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ Mathematica # рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ _unfamiliar_ рдХреА рдкрд╕рдВрдж рдХрд╛ рд╣реЛ
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХрд▓-рдкреНрд░реЗрд╖рдг рдбреЙрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдХрдИ рдкреНрд░реЗрд╖рдг
рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдп рд╕реБрдирд╛рдИ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ
SVO рдСрд░реНрдбрд░ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рд▓реЛрдЧ _are_ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЯреАрдпреВ рдкрд░, 17 рдирд╡рдВрдмрд░, 2015 рдХреЛ 12:09 рдмрдЬреЗ рд╕реНрдЯреАрдлрди рдХрд░рдкрд┐рдВрд╕реНрдХреА рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╢рд╛рдпрдж, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рддрд░реНрдХ рдбреВ-рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдФрд░) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдмрд╣реБрдд рд╕рдлрд▓ рдФрд░ рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИред
рдпрд╣ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИ
рд╡рд╣ рдЕрднреВрддрдкреВрд░реНрд╡ - рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реНрдХрд╛рд▓рд╛ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЧрдгрд┐рддрдЬреНрдЮ # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕реА рддрд░рд╣ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/5571#issuecomment -157437223ред

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреВрд╕реНрдЯ рдореЗрдВ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде C ++ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдЬреЛ _1, _2, _3 рдЙрдкрдпреЛрдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ _1(x, y...) = x , _2(x, y, z...) = y рдЖрджрд┐), рд╡рд╣ рд╕реАрдорд╛ рдЬреЛ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдХреЙрд▓ рдЬреИрд╕реЗ fun(_1) x -> fun(x) , fun рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдЧрдд рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдорддреМрд░ рдкрд░ рдореИрдХреНрд░реЛ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, fun рдПрдХ "рд▓реИрдореНрдмреНрдбрд╛ рдкреНрд░рдХрд╛рд░" рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ "рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ)ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЗрд╕ рдХрд╡рд┐рддрд╛ рд▓реИрдВрдмрдбрд╛ рдиреЛрдЯреЗрд╢рди рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ 2f(_) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП desugaring 2*(x -> f(x)) : рдпрд╣ рдорддрд▓рдм рд╣реЛрдЧрд╛ "рдкрд╣рд▓рд╛ рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░, рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреА рддрд░реНрдЬ рдкрд░ рдирд┐рдпрдо рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП f(_) , рддреЛ рдлрд┐рд░ рд╕реЗ рд╕рд╛рде рд░рд┐рдХрд░реНрд╕рд┐рд╡рд▓реА рдирд┐рдпрдореЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди f(_) рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛ _ ред рдпрд╣ рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА рднреА рдЬреИрд╕реЗ f(g(_)) тЖТ x -> f(g(x)) , "рдХреЛрд╖реНрдардХреЛрдВ рдирд┐рдпрдо" рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрддрд░ рдкрд░ рд░реБрдХреЗрдВ, рдЬреИрд╕реЗ f((g(_))) тЖТ f(x->g(x)) ред

рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП "terse lambda рдЕрдВрдХрди" рдирд╛рдо рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред (рдХрд░реА рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░)ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _1 , _2 , _3 рдЕрдиреНрд╡реЗрд╖рдг рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБ-рддрд░реНрдХ рд▓рдВрдмреЛрджрд╛ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдореИрдВ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рдЪрд░ рдирд╛рдореЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реБрдЖ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ ... рдФрд░ _ рд╣реЛрдирд╛ x рдФрд░ y рдореЗрдВ рд╕рдорд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐_ рд╕рд┐рд░реНрдл рдкрд╛рдЧрд▓ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдпрд╣ рдПрдХ рд╣реА рдЯреНрд░рд┐рдХ рд╕реНрдХреЗрд▓рд╛ _ -syntax рдиреЗ рдереЛрдбрд╝рд╛ рднреНрд░рдо рдкреИрджрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ ( рд╕реНрдХреИрд▓рд╛ рдореЗрдВ _ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВ)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рдЖрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

x -> f(x) + g(x)

рдпрд╛ рдЗрд╕реА рддрд░рд╣, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛:

f(_) + g(_)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдк рддрд░реНрдХреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ:

x, y -> f(y, x)
f(_2, _1)  # can't do with other suggested _ syntax

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдирд╛рдо рддрд░реНрдХ рд╕рдВрдЦреНрдпрд╛ ( _1 , _2 , _3 ... рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдЦрдбрд╝реА рд╣реИред : рдЬрдм рдЖрдк рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд▓рдВрдм рдореЗрдордиреЗ рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреЗ рд╣реИрдВ? рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рд╢рд░реАрд░ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рд╕рдВрднрд╡рддрдГ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрдЯрд┐рд▓ рдкрджреЛрдиреНрдирддрд┐ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ (рдПрдХ рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд╕рд╛рде) рд╣реЛрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд░реВрдВрдЧрд╛ред рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП

foo(_1, _1 + _2  + f(_1, v1) + g(_2, v3), _3 * _2, v2) + g(_4, v4) +
 f(_2, v2) + g(_3, v5) + bar(_1, v6)

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рд╣реИ? рдПрдХ рд╕реАрдорд╛рдВрдХрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдореИрдВ ╬╗ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛) рдЪреАрдЬреЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ:

╬╗(foo(_1, ╬╗(_1 + _2)  + ╬╗(f(_1, v1) + g(_2, v3)), _3 * _2, v2) + g(_4, v4)) + 
╬╗(f(_2, v2) + g(_3, v5) + bar(_1, v6))

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ MethodError: + has no method matching +(::Function, ::Function) , рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдпрд╣ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @StefanKarpinski рдХреБрдЫ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕реНрдерд┐рддрд┐ рд╣реИрдВ рдЬреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬреЛрд░рджрд╛рд░ рд░реВрдк рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рд╣реИрдВред рдПрд░реЛ рдорд┐рд╕рд╛рд▓ рдЗрди рдореЗрдВ рд╕реЗ рдХрдИ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХреБрдЫ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рд╣реИрдВред рд╣реЛрдирд╣рд╛рд░, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕рд╛рд╡рдзрд╛рди рд╡рд┐рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ terseness рдмрдирд╛рдо рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдФрд░ рд╕реБрдЧрдореНрдпрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░ рд╣реИред рдмреЗрд╢рдХ рдРрд╕рд╛ рдХреБрдЫ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ -> рдиреЛрдЯреЗрд╢рди рд╕реЗ рдХрдо рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд░рд┐рд╕реАрдорди рд╕рд╛рд░реНрдердХ рд▓рдЧрддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди -> рдЙрдкрд╕рд░реНрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ _ рддрд░реНрдХ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

(-> 2f(_) + 1)

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

map(->_ + 1, x)

рдЕрднреА рдореИрдВ https://github.com/JuliaLang/julia/issues/5571#issuecomment -157424665 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЗрди рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдкреВрд░реНрд╡рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рдЕрдЧрд▓реЗ 12 рдШрдВрдЯреЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ lhome рд╕рдордп рд╣реИ
(рд╢рд╛рдпрдж рдЕрдЧрд▓реЗ 24 рдореЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рджреВрд░ рдЬрд╛рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ)
рд╡реИрд╕реЗ рднреА, рдПрдХ рдмрд╛рд░ рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдЕрдЬреАрдм рд╕рд╛ рдЬреЛ https://github.com/JuliaLang/julia/issues/5571#issuecomment -157424665 рд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИ

  • f(_,_) тЖТ x,y -> f(x,y) (рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ)
  • f(_,2_) тЖТ ??

    • f(_,2_) тЖТ x,y -> f(x,2y) (рдЙрдЪрд┐рдд)

    • f(_,2_) тЖТ x-> f(x,y->2y) (рдореБрдЭреЗ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рд╕рди рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреНрдпрд╛ рд╣реИ)

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рд╣реА рд╣реИред

рддреЛ рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИред
http://nbviewer.ipython.org/gist/oxinabox/50a1e17cfb232a7d1908

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдПрдПрд╕рдЯреА рдкрд░рдд рдореЗрдВ рдмреНрд░реИрдХреЗрдЯрд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ - рд╡реЗ рдЕрдХреНрд╕рд░ (рд╣рдореЗрд╢рд╛?) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдлрд┐рд░ рднреА рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ

R рдореЗрдВ magrittr рдХреЗ рдХреБрдЫ рдирд┐рдпрдо рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

рдпрджрд┐ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред , рдпрд╣ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ:

. %>% `+`(1)

рдлрд╝рдВрдХреНрд╢рди (x) x + 1 рдХреЗ рд╕рдорд╛рди рд╣реИ

рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:
1) рдкрд╣рд▓реЗ рддрд░реНрдХ, рд╕рд╛рде рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗ рдЬрдВрдЬреАрд░ред
2) рдХреЗрд╡рд▓ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдбреЙрдЯреНрд╕ рддрдХ рдЬрдВрдЬреАрд░ред

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

рдЗрд╕рд▓рд┐рдП

2 %>% `-`(1) 

2 рд╣реИ - 1,

рддрдерд╛

1 %>% `-`(2, . )

рдпрд╣ рднреА 2 - 1 рд╣реИ

рдореЛрдб 2 рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

2 %>% { `-`(2, . - 1) }

2 - (2 - 1) рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред

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

рдЖрдИрд░рд┐рд╕%>%
{
рдПрди <- рдирдореВрдирд╛ (1:10, рдЖрдХрд╛рд░ = 1)
рдПрдЪ <- рд╕рд┐рд░ (?, рдПрди)
рдЯреА <- рдкреВрдВрдЫ (?, рдПрди)
rbind (H, T)
}%>%
рд╕рд╛рд░рд╛рдВрд╢

рдпрд╣ рдЗрд╕ рд╕рдордп рдХреЗрд╡рд▓ рдПрдХ рдЖрдзрд╛-рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ "рдЯреНрд░реВ рд▓реИрдВрдмрдбрд╛" рдФрд░ "рдбрдореА рд╡реИрд░рд┐рдПрдмрд▓" рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЯрдкрд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд▓рд╛рдкрддрд╛ рдорд╛рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ рд▓реИрдореНрдмреНрдбрд╛ рдЬреЛ рдПрдХ рдЯреНрдпреВрдкрд▓ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЯреНрдпреВрдкрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ? рддреЛ, (_, 'b', _, 4) (x, y) -> (x, 'b', y, 4) рд╡рд╛рдкрд╕ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдлрд┐рд░, рдпрджрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓рд┐рдВрдЧ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ foo(a, b) рдЕрд░реНрде рд╣реИ " foo рдХреЛ Tuple (a, b) рдпрд╛ рдпрджрд┐ рддрд░реНрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рддреЛ foo рд▓рд╛рдЧреВ рдХрд░реЗрдВ foo(_, b, c)(1) apply(foo, ((x) -> (x, b, c))(1)) рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА infix рд╕рдВрдХреЗрддрди рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЯреНрд░рд┐рдм рд▓реИрдВрдмрдбрд╕ рдХреЗ рд╕рд╛рде рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ рдХреЛрд╖реНрдардХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рдм рдХреЗ рдмрд╛рдж, 1 + _ рд╣рдореЗрд╢рд╛ +(1, _) рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

@jballanc рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯрдкрд▓ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо, рдЬрдм рддрдХ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреА рдореЗрд░реА рд╕рдордЭ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рджреЛрд╖рдкреВрд░реНрдг рди рд╣реЛред

@samuela рд╕реЗ рдореЗрд░рд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╣реИ рдХрд┐ foo(a, b) foo((a, b)...) рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЯреБрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЯреБрдкрд▓ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрднреА рдирд┐рд░реНрдорд╛рдг рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред

@ рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдВ - рдЕрдЧрд░ рдореИрдВ рдпрд╣рд╛рдБ рдЬрд╝рд░реВрд░рдд рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рджреЛрд╣рд░рд╛ рд░рд╣рд╛ рд╣реВрдБ рддреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдореИрдВ |> рдХреЛ do "рдЬрд╛рджреВ" рдХрд╛ рдкреВрд░рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЛрдЯ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ

3 |> foo == foo(3) # or foo() instead of just foo, but it would be nice if the parentheses were optional
3 |> foo(1) == foo(1, 3)
3 |> foo(1,2) == foo(1,2,3)

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, a |> f(x) _last_ рд╕реЗ рддрд░реНрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ f(x) do; a; end _reirst_ рд╕реЗ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддреБрд░рдВрдд map , filter , all , any et рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХрд░ рджреЗрдЧрд╛ред рдЕрд▓ред, _ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж do рд╕рд┐рдВрдЯреИрдХреНрд╕ рджрд┐рдпрд╛ рдЧрдпрд╛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреЗ рдкрд╛рдардХреЛрдВ рдкрд░ рдПрдХ рдЕрдиреБрдЪрд┐рдд рд╡реИрдЪрд╛рд░рд┐рдХ рдмреЛрдЭ рдбрд╛рд▓рддрд╛ рд╣реИред

рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдореБрдЦреНрдп рдкреНрд░реЗрд░рдгрд╛ рд╕рдВрдЧреНрд░рд╣ рдкрд╛рдЗрдкрд▓рд╛рдЗрди (# 15612 рджреЗрдЦреЗрдВ) рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдирд┐рд░реНрдорд╛рдг рд╣реИ, рдФрд░ рдПрдХ рдЬреЛ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрдореАрди рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╡реЗ рд╕рдордЭ рдЬрд╛рдПрдВрдЧреЗ)ред

рд╡рд╣ @>> рдореИрдХреНрд░реЛ https://github.com/MikeInnes/Lazy.jl рд╕реЗ рд╣реИред

@ рд▓рд╛рд▓рдореБрдж рдирд╛рдЗрд╕! рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ: рдбреА

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрди рджреЛ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рдмреАрдЪ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдЕрдВрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝рд╛ рд╣реИ:

# from Lazy.jl
@> x g f(y, z)

# if this became a first-class feature of |>
x |> g |> f(y, z)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдкрдардиреАрдпрддрд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджреГрд╢реНрдп рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛рдПрдБ рдХрд╣рд╛рдБ рд╣реИрдВ - x g рдФрд░ g f(x, рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рди f(x, y) рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЪреВрдБрдХрд┐ @>> рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, |> рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ 0.5 рдореЗрдВ

(рдореИрдВ рдСрдкрд░реЗрдЯрд░ рдХреА рд╕рдВрдХреЗрддрди рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдКрд░реНрдЬрд╛ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрддрди рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд░рддрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рдкрд╛рдЗрдкрд┐рдВрдЧ" рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдзрд╛рд░рдгрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (рд╕реАрдПрдл) рд╢рдмреНрдж "рд╕рдВрдЧреНрд░рд╣ рдкрд╛рдЗрдкрд▓рд╛рдЗрди"), рдФрд░ рдЬреИрд╕реЗ рдХрд┐ F # рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП |> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ F # рдХрд╛рд░реНрдп рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рднрд┐рдиреНрди рд╣реИрдВред)

рд╣рд╛рдВ, рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдкрдардиреАрдпрддрд╛ рдХреЗ рдореЛрд░реНрдЪреЗ рдкрд░ рд╕рд╣рдордд рд╣реВрдВред рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк |> 0.5 рдХрд╛

рдЗрд╕реА рддрд░рд╣, Lazy.jl рдХреЗ @>> рдореИрдХреНрд░реЛ рдкрд╛рд░реНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ |> рдЬрдВрдЬреАрд░ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рд╣рдореНрдоред рдореИрдВ рддреЛ Lazy.jl рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣ 0.5 рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ :) рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЬреВрд▓рд┐рдпрд╛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рддрдХ рдореБрдЭреЗ рдХреБрдЫ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рдорд┐рд▓рддреА, рддрдм рддрдХ |> рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдЪреЗрдирд┐рдВрдЧ рдкреИрдХреЗрдЬ рд╣реИ, ChainMap.jlред рдпрд╣ рд╣рдореЗрд╢рд╛ _ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдореИрдкрд┐рдВрдЧ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред Https://github.com/bramtayl/ChainMap.jl рджреЗрдЦреЗрдВ

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

рд╕рдВрдХреБрд▓

рдиреЙрдирдкреИрдХреЗрдЬ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк

рд╕рдореНрдмрдВрдзрд┐рдд:


рд╢рд╛рдпрдж рдЗрд╕реЗ рд╢реАрд░реНрд╖ рдкрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛: 2020-04-20

рдпрд╣ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЕрдЬреАрдм рд╣реИ: https://gist.github.com/fcard/b48513108a32c13a49a387a3c530f7de

рдЙрдкрдпреЛрдЧ:

include("partial_underscore_generated.jl")
using GeneratedPartial

const sub = partialize(-)
sub(_,2)(1) == 1-2
sub(_,_)(1,2) == 1-2
sub(_,__)(1)(2) == 1-2
sub(__,_)(2)(1) == 1-2 #hehehe

# or
<strong i="8">@partialize</strong> 2 Base.:+ # evily inserts methods in + and allows partializations for 2 arguments
(_+2)(1) == 1+2

# fun:
sub(1+_,_)(2,3) == sub(1+2,3)
sub(1+_,__)(2)(3) == sub(1+2,3)
(_(1)+_)(-,1) == -1+1

# lotsafun:
appf(x::Int,y::Int) = x*y
appf(f,x) = f(x)
<strong i="9">@partialize</strong> 2 appf

appf(1+_,3)(2) == appf(1+2,3)
appf(?(1+_),3) == appf(x->(1+x), 3)
appf(?sub(_,2),3) == appf(x->x-2,3) # I made a method *(::typeof(?),::PartialCall), what of it!!?

# wooooooooooooooooooooooooooooooooo
const f = sub
f(_,f(_,f(_,f(_,f(_,f(_,f(_,f(_,f(_,_)))))))))(1,2,3,4,5,6,7,8,9,10) == f(1,f(2,f(3,f(4,f(5,f(6,f(7,f(8,f(9,10)))))))))
f(_,f(__,f(___,f(____,f(_____,f(______,f(_______,f(________,f(_________,__________)))))))))(1)(2)(3)(4)(5)(6)(7)(8)(9)(10) == f(1,f(2,f(3,f(4,f(5,f(6,f(7,f(8,f(9,10)))))))))

# this answers Stefan's concern (which inspired me to make this hack in the first place)
#
#    const pmap = partialize(map)
#    map(f(_,a),   v) == map(x->f(x,a), v)
#    pmap(?f(_,a), v) == map(x->f(x,a), v)
#    pmap(f(_,a),  v) == x->map(f(x,a), v)
#
# it adds a few other issues, of course...


рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдзрд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред

PS рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ @partialize рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

<strong i="15">@partialize</strong> 2:3 Base.:- # partialized for 2 and 3 arguments!

(_-_-_)(1,2,3) == -4
(_-_+_)(1,2,3) == +2

рдареАрдХ рд╣реИ, рдореИрдВ рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдЬрд┐рд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ IMO SISO рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЫреЛрдЯреЗ рдЬрдВрдЬреАрд░ рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ MISO (рдЕрд░реНрдз-рдПрдордЖрдИрдПрдордУ?) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реВрдВред

рдореБрдЭреЗ рдЖрд░рдИрдкреАрдПрд▓ рдкрд╕рдВрдж рд╣реИред рдмрд╣реБрддред рдпрд╣ рдкреНрдпрд╛рд░рд╛ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ MATLAB рдпрд╛ рдЕрдЬрдЧрд░ рдпрд╛ рд╢реЗрд▓ рдХреА рддрд░рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдПрдХ рдкреИрдХреЗрдЬ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЛрдб рд▓реЗрдирд╛ рдФрд░ рдЙрд╕реЗ REPL рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЛрдб рдХреА рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рднреА рдкрд╕рдВрдж рд╣реИрдВред рдЖрд░рдИрдкреАрдПрд▓ рд╣рд░ рд▓рд╛рдЗрди рдкрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рд╣рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдмрд╛рдж ans рднреА рд░рд┐рдЯрд░реНрди / рдбрд┐рдлрд╛рдЗрди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ MATLAB рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдпрд╣ рдПрдХ рдмреБрд░рд╛ рддрд░реНрдХ рд╣реИ!)ред рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬреВрд▓рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛ / рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЙрди рд╡рд┐рд╖рдо рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ ans рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореИрдВ рдХреБрдЫ рдЯреБрдХрдбрд╝рд╛-рд╡рд╛рд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдКрдкрд░ рд▓рд┐рдЦреЗ рдПрдХ рдФрд░ рдХрджрдо рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрд╣ рдирд╛рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕реЗ рдЯрд╛рд▓ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди _every_ рдкреНрд░рд╕реНрддрд╛рд╡ рдпрд╣рд╛рдВ рд░рдЪрдирд╛ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░рдг рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, _ рдЬрд╛рджреБрдИ рд╣реЛрдирд╛ рд╕рд┐рд░реНрдл _odd_ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ REPL рдореЗрдВ рдкреИрдХреЗрдЬ рд╕реЗ рдХреЛрдб рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _want_ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдЧрд░ рдореБрдЭреЗ рдРрд╕рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЬрд╛рджреБрдИ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

<strong i="12">@repl_compose</strong> begin
   sin(x)
   ans + 1
   sqrt(ans)
end

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрдИ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ ans[1] , ans[2] , рдЖрджрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреВрд▓рд┐рдпрд╛ рдХреЗ MISO рдореЙрдбрд▓ рдХреЗ рдХрдВрдкреЛрдЬрд╝рд┐рд╢рди рдореЙрдбрд▓ рдХреЗ рд╕рд┐рдВрдЧрд▓-рд▓реЗрд╡рд▓ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдорд╛рдирдХ рдЬреВрд▓рд┐рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕_, рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВред

рдореИрдХреНрд░реЛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдмрд╕ Expr(:block, exprs...) рдХреЛ Expr(:block, map(expr -> :(ans = $expr), exprs) ( let ans рдПрдХ

рд╡реИрд╕реЗ рднреА, рдмрд╕ рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг! рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рдзрд╛рдЧрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛!

рдпрд╣ рд╣рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдмрд╛рдж ans рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ / рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ MATLAB рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдпрд╣ рдПрдХ рдмреБрд░рд╛ рддрд░реНрдХ рд╣реИ!)ред

рдЕрд╕рд▓ рдореЗрдВ, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрдВрдХреНрд╢рди рдЪреЗрдВрдЬрд┐рдВрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ REPL рдХреЛ _ рдмрдЬрд╛рдп ans (рдореЗрд░реЗ рд▓рд┐рдП) рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд╛рджреВ")ред

рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ "рдореВрд▓реНрдп" рдХреЗ рд░реВрдк рдореЗрдВ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ terser lambdas рдХреЗ рд▓рд┐рдПред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ Lazy.jl рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ <strong i="5">@as</strong> and begin ... рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ

рдЪрд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмрд╛рддрдЪреАрдд рдореЗрдВ рдЬрд▓реНрджреА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЕрдкрдирд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐

type Track
  hit::Array{Hit}
end
type Event
  track::Array{Track}
end

event.track[12].hit[43]

рдореБрдЭреЗ рдПрдХ рдШрдЯрдирд╛ рдХреЗ 12 рд╡реЗрдВ рдЯреНрд░реИрдХ рдХреА 43 рд╡реАрдВ рд╣рд┐рдЯ рджреЗрддрд╛ рд╣реИ рдЬрдм track рдФрд░ hit рд╕рд░рд▓ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП

event.getTrack(12).getHit(43)

рдЕрдЧрд░ рд╡реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдирд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд╡рд╣реА рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдХрд╣рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛

getHit(getTrack(event, 12), 43)

рдпрд╣ рдФрд░ рдЧрд╣рд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рдЖрдк рдЬрд╛рддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рдпреЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИрдВ, рдпрд╣ рддрд░реНрдХ рдХреЛ рдлрдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ (рдПрдХ рд▓рд╛ рд╕реНрдкрд╛рд░реНрдХ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдмрдирд╛рддрд╛ рд╣реИред

рдореИрдВ рдЕрдм рдпрд╣ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рд░рд╕реНрдЯ рдХреЗ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ structs (Julia type ) рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдЙрдирдХреЗ рдкрд╛рд╕ impl рдХреЛ struct рдХреЗ рдирд╛рдо рдкрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рднреА рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, рдпрд╣ рд╢реБрджреНрдз рд╕рдВрд╢реНрд▓рд┐рд╖реНрдЯ рдЪреАрдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдбреЙрдЯ рдиреЛрдЯреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

impl Event {
  fn getTrack(&self, num: i32) -> Track {
    self.track[num]
  }
}

impl Track {
  fn getHit(&self, num: i32) -> Track {
    self.track[num]
  }
}

рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

impl Event
  function getTrack(self::Event, num::Int)
    self.track[num]
  end
end

impl Track
  function getHit(self::Track, num::Int)
    self.hit[num]
  end
end

рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ self рдХреА рдХреЛрдИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ рдкреНрд░реЗрд╖рдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк self рдХреА рдиреНрдпреВрдирддрдо рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ ::Event рдФрд░ ::Track рд▓рд┐рдЦрдирд╛ рди рдкрдбрд╝реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ "рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ" impl рдореЗрдВ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ self ред (рдЬрдВрдЧ new рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред)

рд░рд╕реНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ types рдкрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИред рдпрд╣ рдХреЛрдб рдбреБрдкреНрд▓реАрдХреЗрд╢рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП impls рдкрд░ рд╕рдорд╛рди рдкрджрд╛рдиреБрдХреНрд░рдо рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдорд╛рдирдХ OOP рдбреЗрдЯрд╛ type рдФрд░ рд╡рд┐рдзрд┐ impl рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдХрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЦреНрдд рдорд┐рд░рд░рд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд┐рдкрдЪрд┐рдкрд╛ рдмрд┐рдВрджреБ рд╣реИ: рдорд╛рди рд▓реАрдЬрд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд╛рдо track рдФрд░ hit impl , рдмрдЬрд╛рдп getTrack рдФрд░ getHit ред рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ track рдФрд░ hit type рдмрдХрд╛рдпрд╛ track рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ред рдлрд┐рд░ event.track рд╕рд░рдгреА рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рдПрдЧрд╛? рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рддреБрд░рдВрдд рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди types Function рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдмрд╕ рдПрдХ рдХрдВрдмрд▓ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВ: рдбреЙрдЯ рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реЗ рдЗрд╕реА impl рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдлрд┐рд░ рдЗрд╕реА type ?

рджреВрд╕рд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд░, рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╡рд╕реНрддреБ ( type рдФрд░ impl ) рдХреЗ рд▓рд┐рдП рджреЛ "рдкреИрдХреЗрдЬ" рд╣реЛрдиреЗ рд╕реЗ рдХреИрд╕реЗ рдмрдЪреЗрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ:

function Event.getTrack(self, num::Int)
  self.track[num]
end

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП getTrack рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП Event рдРрд╕реЗ

myEvent.getTrack(12)

(myEvent, 12) рд▓рд┐рдП рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рдмрд╛рдЗрдЯрдХреЛрдб рджреЗрддрд╛ рд╣реИ?

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

@jpivarski рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬреЛ, рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдХрд░, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ) рдХреБрдЫ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдЪреИрдирд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? рдореИрдВ рдЕрднреА рднреА do рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, |> ) рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛:

event |> getTrack(12) |> getHit(43)

рдореБрдЦреНрдп рдХрд╛рд░рдг рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд░рд╕реНрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ рдХреБрдЫ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдПрдВ рд╣рд╛рде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдореМрдЬреВрджрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд┐рдП рдмрд┐рдирд╛ parser.parse рдЬреИрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреВрд▓рд┐рдпрд╛ Base.parse рдлрд╝рдВрдХреНрд╢рдиред рдореИрдВ рдЬрдВрдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рд╣реИрдХ рд╢реИрд▓реА рдкрд╛рдЗрдкрд┐рдВрдЧ рджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реЛрдЧрд╛ред

@tlycken рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреВрд░реНрд╡рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦрдирд╛ред
(рди рд╣реА рд╕реБрдЭрд╛рдП рдЧрдП рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХрд░реЗрдВред)

рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

foo(a,b) = a+b
foo(a) = b -> a-b

2 |> foo(10) == 12   #Pipe Precedence > Call Precedence 
2 |> foo(10) == 8     #Pipe Precedence < Call Precedence   

@oxinabox рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ "рд╕рд┐рд░реНрдл" рдПрдХ рдирд┐рдпрдорд┐рдд рдСрдкрд░реЗрдЯрд░ рд╣реЛрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдмрд▓реНрдХрд┐ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддрддреНрд╡ рд╣реИ; 2 |> foo(10) desugars рд╕реЗ foo(10, 2) рдЙрд╕реА рддрд░рд╣ foo(10) do x; bar(x); end desugars рд╕реЗ foo(x -> bar(x), 10) ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЙрд▓ рдорд┐рд╕рд╛рд▓ (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЬреЛ рдХрд┐ рд╡реИрд╕реЗ рднреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ) рдкрд░ рдкрд╛рдЗрдк рдХреА рдорд┐рд╕рд╛рд▓ рд╣реИред

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╡рд┐рд╖рдп рдкрд░, . рдХрдо рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдЕрдкреНрд░рд┐рдп рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ |> рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдирдХ рд╣реИред рдореИрдВ . рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдПрдХ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг) рдФрд░ рдХреЛрдИ рднреА рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ; |> , рдореБрдЭреЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди (рдЪрд╛рд░ рд╡рд░реНрдг рдкреНрд░рддреНрдпреЗрдХ) рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рд╕реНрдкреАрдбрдмрдореНрдк рд╣реЛрдЧрд╛ред рд╢реЗрд▓рд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХрд╛ | рдХрд╛ рд╕рд╛рджреГрд╢реНрдп рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди > рдХрд╛рд░рдг рддреБрд░рдВрдд рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдбреЙрдЯ рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ type рдпрд╛ impl (рдореЗрд░реЗ рдкрд╣рд▓реЗ рд╕реБрдЭрд╛рд╡) рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рджрд╕реНрдп рдбреЗрдЯрдо рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ рдирд╛рдо рд╕реНрдерд╛рди (рдореЗрд░рд╛ рджреВрд╕рд░рд╛ рд╕реБрдЭрд╛рд╡)? рджреВрд╕рд░реЗ рд╕реБрдЭрд╛рд╡ рдореЗрдВ, type рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ _after_ type рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╣реАрдВ рдПрдХ рд╕рджрд╕реНрдп рдбреЗрдЯрдо рдХреЛ рдУрд╡рд░рд╢реЗрдб рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рджреЛрдиреЛрдВ рдиреЗрдорд╕реНрдкреЗрд╕ рдбреЙрдЯреНрд╕ (рдореЗрд░рд╛ рджреВрд╕рд░рд╛ рд╕реБрдЭрд╛рд╡) рдФрд░ |> рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рд░рд╣реЗрдЧрд╛; рд╡реЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, |> рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, do рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордорд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ do рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк event |> getTrack(12) |> getHit(43) рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рддреЛ |> рдЧреИрд░-рдлрд╝рдВрдХреНрд╢рдВрд╕ ( Events рдФрд░ Tracks ) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк event |> getTrack(12) |> getHit(43) рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рддреЛ |> рдЧреИрд░-рдлрд╝рдВрдХреНрд╢рдВрд╕ ( Events рдФрд░ Tracks ) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд╣реАрдВ - рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ _ рдЕрдкрдиреЗ рджрд╛рдПрдВ_ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗред event |> getTrack(12) getTrack(12, event) рд╣реИ рдЬреЛ рджрд╛рдИрдВ рдУрд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдмрд╛рдИрдВ рддрд░рдл рдХреНрдпрд╛ рдерд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдП) рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдкреВрд░реНрд╡рд╡рд░реНрддреАрддрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЙрд▓ рдХрд╛ рдкреБрдирд░реНрд▓реЗрдЦрди рд╣реИ), рдФрд░ рдмреА) рд▓реЗрдлреНрдЯ-рдЯреВ-рд░рд╛рдЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрд░реНрдбрд░ ( getHit(43, getTrack(12, event)) рдмрдЬрд╛рдп getHit(43, getTrack(12), event) ) ред

рд▓реЗрдХрд┐рди getTrack's рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ

function getTrack(num::Int, event::Event)

рдЗрд╕рд▓рд┐рдП рдпрджрд┐ event |> getTrack(12) event getTrack's рдЕрдВрддрд┐рдо рддрд░реНрдХ рдореЗрдВ рд╣реИ, рддреЛ рдпрд╣ Event рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдореЗрдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ Function ред рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл do рдФрд░ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдордХрдХреНрд╖ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЬреВрд▓рд┐рдпрд╛ 0.4 рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдХреА рдХрд┐ рддрд░реНрдХ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред (рд╕рдВрднрд╡рддрдГ рдХреНрдпреЛрдВрдХрд┐ do event end рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓реМрдЯрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рд╣реИ event , рдмрдЬрд╛рдп event рд╣реАред)

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

type TownCrier
  name::AbstractString
  shout::Function

  function TownCrier(name::AbstractString)
    self = new(name)
    self.shout = () -> "HELLO, $(self.name)!"
    self
  end
end

tc = TownCrier("Josh")
tc.shout()                                #=> "HELLO, Josh!"
tc.name = "Bob"
tc.shout()                                #=> "HELLO, Bob!"

рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдЯрд░реА рд╕реЗ рдЙрддрд╛рд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд┐рдП рдмрд┐рдирд╛, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдХреБрд╢рд▓ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдлрд╝рдВрдХреНрд╢рди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рддреЛ рдкрд┐рдШрд▓ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рдирд┐рд░реНрдорд╛рдг рдирд┐рдХрд╛рдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдкрд░ "рд╕реНрд╡" рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдХрд░реА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рддреЛ рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреНрд▓реАрдирд░ рд╣реЛрдВрдЧреЗред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреЗрдирд┐рдВрдЧ рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддрд░реНрдХ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

begin
    1
    vcat(_, 2)
    vcat(3, _)
end

# [3, 1, 2]

рдЬреИрд╕рд╛ рдХрд┐ @MikeInnes рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА @_ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдФрд░ рдпрджреНрдпрдкрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, ChainMap.jl рднреА рдЕрдм рдЗрд╕ рддрд░рд╣ рдХреА рдЪреИрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдбреЙрдЯ рдлреНрдпреВрдЬрди рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

begin
    [1, 2, 3]
    .+(_, 2)
    .*(_, 2)
    .-(10, _)
end

рдпрд╛, @chain_map рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП,

begin
    ~[1, 2, 3]
    +(_, 2)
    *(_, 2)
    -(10, _)
end

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдлрдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди Obj.times:

type Obj
    x
    times::Function
    function Obj(x)
       this = new(x)
       this.times =  (n) -> (this.x *= n; this)
       this
    end
end

>>>Obj(2).times(3)
Obj(6,#3)

рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди Obj.times рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛:

member function times(this::Obj, n)
     this.x *= n
     return this
end

>>>Obj(2).times(3)
Obj(6,#3)

рдЬрд╣рд╛рдВ member рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреАрд╡рд░реНрдб рд╣реИред
рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИред рдмрд╛рдж рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдЪрд░ рдХреЗ рдмрд╛рдж рдбреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд "рд╕рджрд╕реНрдп" рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдВрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд┐рдзрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рдеред рдпрд╣ рдлрдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рд╕реЗ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рдУрдУ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА рдЗрд╕реЗ рдЪрд┐рдирд┐рдВрдЧ рд▓реБрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЕрд▓рдЧ рд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдФрд░ рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдкрдврд╝рд╛ рд╣реИ, рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ:

рдореВрд▓ рдЬрдВрдЬреАрд░ :
in1 |> function1
рд╕рдорд╛рди: in1 |> function1(|>)

in2 |> function2(10)
рд╕рдорд╛рди: in2 |> function2(|>,10)

рдФрд░ рднреА рдЬрдВрдЬреАрд░:
in1 |> function1 |> function2(10,|>)

рдЪреЗрди рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдФрд░ рд╡рд┐рд▓рдп:
рджреЛ рдмрд╛рд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд╛рдЦрд╛ out1 , out2 :
function1(a) |out1>
function2(a,b) |out2>

рд╢рд╛рдЦрд╛ out1 рдФрд░ out2 :
function3(|out1>,|out2>)

рдЖрд▓рд╕реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдХреНрдпрд╛ рд╣рдореЗрдВ function!(mutating_var) рд╕рдореНрдореЗрд▓рди рдХреА рддрд░рд╣ рдХреБрдЫ рдЪрд╛рд╣рд┐рдП?
рдЖрд▓рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо function?() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

рдФрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХрд╛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓ рдЧреНрд░рд╛рдл рдкрд░ рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореИрдВ рд╕рд┐рд░реНрдл рдореМрдЬреВрджрд╛ |> рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ:
`` `` рдЬреВрд▓рд┐рдпрд╛

рдлрд╝рд┐рд▓реНрдЯрд░

рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп MyFilter {F}
рдлреНрд▓рд╛рдЗрдЯ :: рдПрдл
рд╕рдорд╛рдкреНрдд

рдлрд╝рдВрдХреНрд╢рди (mf :: MyFilter) (рд╕реНрд░реЛрдд)
рдлрд╝рд┐рд▓реНрдЯрд░ (mf.flt, рд╕реНрд░реЛрдд)
рд╕рдорд╛рдкреНрдд

рдлрд╝рдВрдХреНрд╢рди Base.filter (flt)
MyFilter (рдлреНрд▓рд╛рдЗрдЯ)
рд╕рдорд╛рдкреНрдд

рд▓реЗрдирд╛

рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп MyTake
n :: Int64
рд╕рдорд╛рдкреНрдд

рдлрд╝рдВрдХреНрд╢рди (mt :: MyTake) (рд╕реНрд░реЛрдд)
рд▓реЗ (рд╕реНрд░реЛрдд, mt.n)
рд╕рдорд╛рдкреНрдд

рдлрдВрдХреНрд╢рди рдмреЗрд╕.рдЯреЗрдХ (n)
MyTake (рдПрди)
рд╕рдорд╛рдкреНрдд

рдирдХреНрд╢рд╛

рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп MyMap {F}
рдЪ :: рдПрдл
рд╕рдорд╛рдкреНрдд

рд╕рдорд╛рд░реЛрд╣ (рдорд┐рдореА :: MyMap) (рд╕реНрд░реЛрдд)
рдирдХреНрд╢рд╛ (mm.f, рд╕реНрд░реЛрдд)
рд╕рдорд╛рдкреНрдд

рдлрд╝рдВрдХреНрд╢рди Base.map (f)
MyMap (рдЪ)
рд╕рдорд╛рдкреНрдд
enable this to work: рдЬреВрд▓рд┐рдпрд╛
1:10 |> рдлрд╝рд┐рд▓реНрдЯрд░ (i-> i% 2 == 0) |> рд▓реЗ (2) | рдорд╛рдирдЪрд┐рддреНрд░> (i-> i ^ 2) |> рдПрдХрддреНрд░рд┐рдд рдХрд░реЗрдВ
`` Essentially the idea is that functions like рдлрд╝рд┐рд▓реНрдЯрд░ return a functor if they are called without a source argument, and then these functors all take one argument, namely whatever is "coming" from the left side of the |> . The >> `` рддреЛ рдмрд╕ рдЗрди рд╕рднреА рдлрдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рдЬрдВрдЬреАрд░ред

filter рдЖрджрд┐ рднреА рдХреЗрд╡рд▓ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдмреЗрд╕ рдореЗрдВ map(f::Any) рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ map рдХреА рдореМрдЬреВрджрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ ...

рдореИрдВ рдмрд╕ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛, рдФрд░ рдореЗрд░реЗ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдХреБрдЫ рд╕рд░рд╕рд░реА рдирдЬрд╝рд░ рдиреЗ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ред рд▓реЛрдЧ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рд▓реЛрдЧ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдбрд┐рдЬрд╛рдЗрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛ рд╣реЛ рддрд╛рдХрд┐ рдПрдХ рд╕реБрдВрджрд░ рд╡реНрдпрд╛рдкрдХ рдЪреЗрдирд┐рдВрдЧ рдХрд╣рд╛рдиреА рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

рдпрд╣ рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рд▓рд┐рдП MyF рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

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

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдлрд╝рдВрдХреНрд╢рдирд▓ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реНрд░реЛрдд рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕рднреА рдПрдХ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдЬреЛ рдХреБрдЫ рднреА рдмрд╛рдИрдВ рдУрд░ рд╕реЗ "рдЖ рд░рд╣рд╛ рд╣реИ" |> |

рдпрд╣, рд▓рдЧрднрдЧ рдмрд┐рд▓реНрдХреБрд▓, рдХреНрд▓реАрдЬреБрд░ рдХреЗ рдЯреНрд░рд╛рдВрд╕рдбреНрдпреВрд╕рд░ рдХрд╛ рд╕рд╛рд░ рд╣реИред рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓реВрдЬреБрд░ рдиреЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЯреНрд░рд╛рдВрд╕рдбреНрдпреВрд╕рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "рдореИрдкрд┐рдВрдЧ" рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдПрдХ "рд░рд┐рдбреНрдпреВрд╕рд┐рдВрдЧ" рдлрдВрдХреНрд╢рди рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА "рд░рд┐рдбреНрдпреВрд╕рд┐рдВрдЧ" рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ concat )ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рднреА "рдореИрдкрд┐рдВрдЧ" рдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛)ред рдЯреНрд░рд╛рдВрд╕рдбреНрдпреВрд╕рд░реНрд╕, рддрдм, рдЗрди "рдореИрдкрд┐рдВрдЧ" рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЗрд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд┐рдирд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдп рдСрдкреНрдЯ-рдЗрди рдХреЛ рдХрд░реАрдиреЗ рд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Base.map(f)    = (xs...) -> map(f, xs...)
Base.filter(f) = x -> filter(f, x)
Base.take(n)   = x -> take(x, n)

рдмреЗрд╢рдХ, рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдкреИрдХреЗрдЬ рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯреБрдХрдбрд╝рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ - рдХрд┐рди рддрд░реНрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдПрдХ рдХреЙрд▓-рд╕рд╛рдЗрдЯ рд╕рд┐рдВрдереИрдЯрд┐рдХ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, f(a, _, b) рд╕реЗ x -> f(a, x, b) ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдп рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯ-рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╣рд╛рдВ, рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЗрди рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдХрд┐рди рддрд░реНрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рдБ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ filter рдФрд░ take рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдЖрдЦрд┐рд░реА рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рд╣реИ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдЙрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрддреНрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ _ рдПрдХ рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддреАрдХ рд╣реИ

рд╣рд╛рдВ, рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╡рд╣рд╛рдВ рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИ, рдФрд░ @malmaud рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рдкреВрд░реНрдг рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рд╡реИрд╕реЗ рднреА рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рд╡реИрд╕реЗ рд╣реА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдЖрдк рд╕рд┐рд░реНрдл рдХрд░реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ( curry(f, as...) = (bs...) -> f(as..., bs...) )ред рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ; curry рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреАрдд рдореЗрдВ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрдП рд╣реИрдВ рдЬреЛ curry(take, _, 2) рдЬреИрд╕реЗ рдПрдХ рдкреНрд░рд╣рд░реА рдореВрд▓реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣рд╛рдВ рдЖрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рддреАрди рднрд╛рд╖рд╛рдПрдБ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ: рдбреА, тАЛтАЛрдПрд▓рд┐рдХреНрд╕рд┐рд░ рдФрд░ рдЕрдм рдЬреВрд▓рд┐рдпрд╛ред рдбреА рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ , рдЬреИрд╕реЗ рдЬрдВрдЧ рдореЗрдВ, рдЕрдореГрдд рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рд╣реИ ред рджреЛрдиреЛрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рд╕реБрдЭрд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрдВрдХреНрд╢рди рдЪреЗрдВрдЬрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╕рдВрдж рдЖрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдзрд╛рд░рд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ред рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реА рддрд░рдл рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ +1 рд╣реИред

рд╣реИрд▓реЛ рдпрд╛рд░реЛ,

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ +1 рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдЗрд╕рдХреА рдмрд╣реБрдд рдмреБрд░реА рдЬрд░реВрд░рдд рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХрд╛рд▓рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

Array(1,2,3,4,5)
  .map(x => x+1)
  .filter(x => x > 5)
  .reduce(_ + _)

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реНрдкрд╛рд░реНрдХ рдпрд╛ рдЕрдиреНрдп MapReduce- рдЖрдзрд╛рд░рд┐рдд рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдЗрд╕ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдбрд╝реА рдФрд░ рдЬрдЯрд┐рд▓ рдиреМрдХрд░рд┐рдпрд╛рдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд░, рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдЪреАрди, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

c(1,2,3,4,5) %>%
  {. + 1} %>%
  {.[which(. > 5)]} %>%
  sum

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

[1,2,3,4,5] |> 
  _ -> map(__ -> __ + 1, _) |>
  _ -> filter(__ -> __ < 5, _) |>
  _ -> reduce(+, _)

рд▓реЗрдХрд┐рди рдпрд╣ рднрдпрд╛рдирдХ рдФрд░ рдмрджрд╕реВрд░рдд рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ-рдЙрдиреНрдореБрдЦ рдХреЛрдб рд▓рд╛ рд▓рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╛рдЗрдк рдХреЗ рд▓рд┐рдП _first рддрд░реНрдХ_ рдореЗрдВ рдлреАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЬреИрд╕реЗ _ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рддрднреА рдЕрд░реНрде рд╣реЛрдЧрд╛ рдЬрдм рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП map рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реЛ рджреВрд╕рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВред

рдЕрддреНрдпрдзрд┐рдХ _ -> _ + 1 рдФрд░ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП Scala рдХреЗ Array(1,2,3).map(_ + 1) рдХреБрдЫ рдмрд░рд╛рдмрд░ рднреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдЬрд╣рд╛рдБ [1,2,3] |> map(~ + 1, _) рдЕрдиреБрд╡рд╛рдж map(~ -> ~ + 1, [1,2,3]) ред рддрд▓рд╛рд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдмрд╛рдж рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ [1, 2, 3] .+ 1 рд╕рд╛рде рдкреНрд░рд╕рд╛рд░рдг рдХрд┐рдпрд╛ рд╣реИ рдпрд╣ рдХрд╛рдлреА рд╡реНрдпрд╕рдиреА рд╣реИред рдХрдореА (рдФрд░ рд╢рд╛рдпрдж рдЫрд╛рдирдиреЗ) рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдкрд╛рдЧрд▓рдкрди рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рд╕рд╡рд╛рд▓ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ do рд▓рдбрд╝рд╛рдИ рджреЛрдиреЛрдВред

рдореИрдВ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдирдпрд╛ рдзрд╛рдЧрд╛ рдЖрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ,
рдПрдХ рдирд╣реАрдВ, рджреЛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдмреЗрд╕ SISO рдкрд╛рдЗрдкрд┐рдВрдЧ рдлрдВрдХреНрд╢рдирд▓рд┐рдЯреА рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреЗрдиреЗ рд╡рд╛рд▓реЗ FIVE рдкреИрдХреЗрдЬ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдУрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЧрдП рд╣реИрдВред
рд╕реВрдЪреА рджреЗрдЦреЗрдВ: https://github.com/JuliaLang/julia/issues/5571#issuecomment -205754539

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝рддреЗ рд╣реИрдВред

рдЕрдЧрд░ рд╣рдореЗрдВ рдЖрдзрд╛рд░ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдорд┐рд▓рдиреА рдереА, рддреЛ рд╡рд╣ _ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдереАред
рддрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рддрд░реНрдХ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рдкрд╣рд▓реЗ рдирд╣реАрдВред
рдЬреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ "рдкреНрд░реЗрдЯреНрд░ рдХрд░реАрдВрдЧ / рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ"

рдКрдкрд░ рджрд┐рдП рдЧрдП рдореЗрд░реЗ рдкреЛрд╕реНрдЯ рдХрд╛ рдорддрд▓рдм рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореБрджреНрджреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдХреАрдХрдд рдореЗрдВ, рдЕрдХреНрд╕рд░ рд╕реИрдХрдбрд╝реЛрдВ рдСрдкрд░реЗрд╢рди рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдЧреИрд░-рдорд╛рдирдХ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдЖрдк рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддреЗ рд╣реИрдВ, рдЪреАрдиреА рд╡рд░реНрдгреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ, рд╡реНрд╣реЙрдЯреНрд╕рдПрдк рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, "рдж" рдЬреИрд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЛ рдЖрдкрдХреЗ рд╡реЗрдм рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реИрдХ-рдмреЙрдХреНрд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЯреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рдорд╛рдирдХреАрдХреГрдд" рд░реВрдк рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░, рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реИрдХ-рдмреЙрдХреНрд╕ рдЯреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХрд┐рддрдирд╛ рдЖрдо рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╢рдмреНрдж рдкрд░ рдпреЛрдЧ рднрд╛рд░, 100 рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдЖрджрд┐ред

рдпреЗ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд┐рдзрд┐ рдХреЙрд▓ рдпрд╛ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╕рд░рд╛рд╕рд░ рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдмрд╕ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИ, рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред

рдпрд╣ рдЬреВрдиреЛ рдФрд░ рдЬреВрд▓рд┐рдпрд╛ 0.6 рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

`` `{} рдЬреВрд▓рд┐рдпрд╛
LazyCall рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
@lazy_call_module_methods рдмреЗрд╕ рдЬреЗрдирд░реЗрдЯрд░
@lazy_call_module_methods Iterator рдлрд╝рд┐рд▓реНрдЯрд░

ChainRecursive рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
start_chaining ()


```{julia}
[1, 2, 3, 4, 5]
<strong i="14">@unweave</strong> ~it + 1
Base.Generator(it)
<strong i="15">@unweave</strong> ~it < 5
Iterators.filter(it)
reduce(+, it)

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦреЗ рдЧрдП рдХреБрдЫ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ:
https://stackoverflow.com/questions/44520097/method-chaining-in-julia

@somedadaism , рдореБрджреНрджреЗ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ рди рдХрд┐ рд╕реНрдЯреИрдХ-рдУрд╡рд░рдлреНрд▓реЛ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ "рд╡рд┐рдЬреНрдЮрд╛рдкрди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреВрд▓рд┐рдпрд╛-рд▓реЛрдЧ SO рдкрд░ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд╣реИрдВ рдФрд░ (рдЗрд╕рд╕реЗ рднреА рдЬреНрдпрд╛рджрд╛) https://discourse.julialang.org/ рдкрд░

рдЬреА, рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ рдХрд┐ рдпрд╣ рдУрдУ рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рд╕рднреНрдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП +1ред рдореЗрд░реЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ (рдлреНрд░реЗрдо) рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдХрд░реЛред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ / рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреИрдХреЗрдЬ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдЙрдирдХреЗ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреБрдЫ рдХреЗ рд▓рд┐рдП +1

1 |> sin |> sum(2, _)

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдкрдардиреАрдпрддрд╛ рдФрд░ рд╕рд░рд▓рддрд╛ рд╕реБрдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореИрдВ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреВрд░реА dplyr / рд╕рд╛рдл рд╢реИрд▓реА рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ ...

рдореИрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рднреА рдПрд▓рд┐рдХреНрд╕рд┐рд░ рдХреЗ рдорд▓реНрдЯреАрд▓рд╛рдЗрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддреЗ рд╣реИрдВред

1
|> sin
|> sum(2)
|> println

println(sum(sin(1),2)) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ

рдмрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдиреЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡реЗ ? рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп _ рдпрд╛ ~ рдЬрд┐рд╕рдХрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд░реНрде рд╣реИ ( _ рдХреБрдЫ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ ~ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдпрд╛ рдФрдкрдЪрд╛рд░рд┐рдХ)ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реА рд╕реНрдерд╛рдирдзрд╛рд░рдХ рдХреЗ рд▓рд┐рдП рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдЦрддрд╛ рд╣реИ (рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рднреА рдорд╛рдиреНрдп рд╣реИ :)

const addOne = add(1, ?); // apply from the left
addOne(2); // 3

const addTen = add(?, 10); // apply from the right
addTen(2); // 12

// with pipeline
let newScore = player.score
  |> add(7, ?)
  |> clamp(0, 100, ?); // shallow stack, the pipe to `clamp` is the same frame as the pipe to `add`.

const maxGreaterThanZero = Math.max(0, ...);
maxGreaterThanZero(1, 2); // 2
maxGreaterThanZero(-1, -2); // 0

рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдХреЗрдЬ рдЯрд┐рдкреНрдкрдгреА рд╕реВрдЪреА рднреА рджреЗрдЦреЗрдВред

_ рд╕рд╛рде рдХреЛрдИ рднреА рдЧрдбрд╝рдмрдбрд╝ 1.x рдореЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ https://github.com/JuliaLang/julia/pull/20328

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

Anon рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП _ рд╕рд╛рде рдореЗрд╕рд┐рдВрдЧ рдХрд░реЗрдВ

@StefanKarpinski рдХрд╛ рд▓рдВрдмреЛрджрд░ рдпрд╛ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬрд╣рд╛рдВ _ (рдПрдХ RHS рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ) рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИред

  • рдпрд╣ рд▓рдЧрднрдЧ рдПрдХ рдореИрдХреНрд░реЛ рджреЗрдЦрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

    • рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ (_) _ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ред рдЬреЛ рд╕рд┐рд░реНрдл рдкрд╣рдЪрд╛рди рд╕рдорд╛рд░реЛрд╣ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛

    • рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рди рдХреЗрд╡рд▓ |> рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ map(log(7,_), xs) рдпрд╛ log(7, _).(xs) рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдХреЙрдореНрдкреИрдХреНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдЖрдзрд╛рд░ 7 рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдПред xs ред

    • рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рднреА рдХрд░ рд░рд╣реЗ рдереЗред

|> рд╕рд╛рде рдореЗрд╕рд┐рдВрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрдирд╛рддреЗ рд╣реИрдВ

рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрд░рдПрдЪрдПрд╕ рдЕрдзрд┐рдирд┐рдпрдо рдХреА рддрд░рд╣ рдмрдирд╛рдПрдВ рдЬреИрд╕реЗ рд╡реЗ рдХрд░реА рдХрд░рддреЗ рд╣реИрдВ

    • рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ, (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рдЬреЛ рд╡рд┐рдзрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ)

  • рдЗрд╕реЗ _ рд╡рд┐рд╢реЗрд╖ рдмрдирд╛рдПрдВ (рдКрдкрд░ рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдФрд░ / рдпрд╛ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдирдХрд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ)

    • рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЗрдиреНрдлрд┐рдХреНрд╕ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА рддрдм рдХреЛрдИ @|>@ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреИрдХреЗрдЬ рдореЗрдВ рдХреИрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ рдПрдХ рдмрд╛рд░ https://github.com/JuliaLang/julia/ рдореБрджреНрджреЛрдВ / 11,608)

    • рдпрд╛ рдЗрд╕реЗ рдЙрди рд╡рд┐рд╢реЗрд╖ рдЧреБрдгреЛрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдВ

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЯрди рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреА рдореЗрд░реА
  • рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ (рдЕрдиреНрдп рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд) рдпрд╣ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рддреЛ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
a
|> f
|>g

рд╡рд░реНрддрдорд╛рди рдХреЗ рдмрдЬрд╛рдп:

a |>
f |>
g

(рдмреНрд▓реЙрдХ рдХреЛ рдмреНрд░реИрдХреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдФрд░ рдмреНрд▓реЙрдХ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)

  • рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ |> (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╛рдкрд╕рдВрдж рдСрдкрд░реЗрдЯрд░) рд╕реБрдкрд░ рдЬрд╛рджреВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдЬреИрд╕рд╛ рдХрд┐ @StefanKarpinski рдиреАрдЪреЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ , рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ typeof(|>) <: Function рдЖрдзрд╛рд░ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдпреЗ рдмрджрд▓рд╛рд╡ рдЗрд╕реЗ рднрд╛рд╖рд╛ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдПрдХ рддрддреНрд╡ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред

рдмреЛрдирд╕ рд╡рд┐рдХрд▓реНрдк: рдпрд╣ рдХрднреА рднреА рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ: # 554 рд╣рд░ рдЬрдЧрд╣ рдХрд░реА рдЬреЛрдбрд╝рдирд╛

рдпрд╣ рднрд╛рд╖рд╛ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдХрд░реА рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗред
рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдвреЗрд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдмрд╕ рдмрд╣реБрдд рднреНрд░рдо рд╣реЛред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреБрдЫ рдФрд░ рднреА рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╛рдиреА "+1 рдпрд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ" рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реИ; рдпрд╛ рдЙрдкрд░реЛрдХреНрдд рдкрд░ рдорд╛рдЗрдХреНрд░реЛрд╡реЗрд╕реНрдЯрд░реНрд╕ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐)ред

рдореБрдЭреЗ 0.7 рдореЗрдВ |> рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд▓реБрднрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдФрд░ рд╕рдВрднрд╡рддрдГ рдЧреИрд░-рдлрд╝рдВрдХреНрд╢рди-рдЬреИрд╕реЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдкреЗрд╢ рдХрд░ рд╕рдХреЗрдВ, рдЬреЛ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдХрд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдореБрдЭреЗ реж. to рдореЗрдВ рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд▓реБрднрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрд╛рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдФрд░ рд╕рдВрднрд╡рддрдГ рдЧреИрд░-рдХрд╛рд░реНрдп-рдЬреИрд╕реЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдкреЗрд╢ рдХрд░ рд╕рдХреЗрдВ, рдЬрд┐рд╕ рдкрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдХрд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЙрд╕ рд╕реВрдЪреА рдкрд░ рдПрдХрдорд╛рддреНрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдХреЗрд╕ рддрдм рд╣реИ рдЬрдм |> рдЕрдкрдиреЗ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреА рддрд░рдл рдХрд░реАрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдХрд░рддрд╛ рд╣реИред
рдпрд╛ рддреЛ рдЕрдкрдиреА рджрд▓реАрд▓реЗрдВ рдкрд╣рд▓реЗ рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдпрд╛ рдЖрдЦрд┐рд░реА рдЖрдЦрд┐рд░реА рддрд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ (/) рдореЗрдВ, рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ (2 рдХрд╛ рдЕрд░реНрде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдПрдХ рдорд╛рд░реНрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ , рдЬрд┐рд╕рдореЗрдВ рддрд░реНрдХ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЕрдиреНрдп рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рднреА рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рд╣реИ
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЙрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдордЭрджрд╛рд░ рдФрд░ рдЕрднреА рддрдХ рдЯреВрдЯ рд░рд╣реА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ,
рдЗрди рдкрд┐рдЫрд▓реЗ рд▓рдЧрднрдЧ 4 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рднреА рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА рдпрд╣ рдмрд╣реБрдд рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдЕрднреА рднреА рдореИрдХреНрд░реЛ рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде |> рд░рдЦрдиреЗ рдФрд░ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХреЗ рддрд╣рдд рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд┐рдлреНрдЯ рдХреБрдВрдЬреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ, рдЬреИрд╕реЗ \\ (рдЬреЛ рдирд╣реАрдВ рдЕрднреА рднреА рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕)ред рд╣рдордиреЗ рдПрдХ рдмрд╛рд░ рд╕реНрд▓реИрдХ рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрддрд┐рд╣рд╛рд╕ рд╢рд╛рдпрдж рд╕рдордп рдХреА рд░реЗрдд рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реИред

рдкрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдкреНрд░рдХрд╛рд╢" рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рдПрдХрд▓ рд╡рд░реНрдг | рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдПрдХрд▓ рд╡рд░реНрдг | рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ .juliarc.jl рдореЗрдВ рд░рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЬреЛ рдХрд┐ рдореБрдЭреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкрдбрд╝рд╛ рд╣реИ; -)

рдХрд┐ рд╢рд┐рдлреНрдЯ рдХреБрдВрдЬреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрднрд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдЬреИрд╕реЗ рдореЗрд░реЗ рд╕реНрд╡реАрдбрд┐рд╢ рдХреАрдмреЛрд░реНрдб рдиреЗ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛ рд╣реИ рдФрд░ (рдмрд▓реНрдХрд┐ рднрдпрд╛рдирдХ) AltGr рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдПрдХ рдФрд░ рддреАрди рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреНрдпрд╛ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП |> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдкрд░рдВрдкрд░рд╛ рд╣реИ? [рдореЗрдереЗрдореЗрдЯрд┐рдХрд╛] (http://reference.wolfram.com/language/guide/Syntax.html) рд╣реИ // рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рд╕рдорд╛рд░реЛрд╣ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдХреАрдмреЛрд░реНрдб рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░, рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ (рд╕реА ++ рдореЗрдВ) рдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди (рдкрд╛рдпрдерди рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

| рд╕рд╛рде рдХреБрдЫ рдХрд╛ рдЗрд╕рдореЗрдВ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдПрдХ | рдмрд┐рдЯ рдмрд┐рдЯ рдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реЛрдЧреАред рдХреНрдпрд╛ || рддрд╛рд░реНрдХрд┐рдХ рдпрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? ||| рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХрд┐рд╕реА рд╣рд╛рд░реНрдб-рдЯреВ-рдкрд╣реБрдВрдЪ рд╡рд░реНрдг рдХреЛ рддреАрди рдмрд╛рд░ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдПрдХ рдмрд╛рд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдкрд░рдВрдкрд░рд╛ рд╣реИред>>

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрдордПрд▓ рдкрд░рд┐рд╡рд╛рд░ рд╕реЗ |> рдХреА рдкрд░рдВрдкрд░рд╛ рд╣реИред рдЬрдм рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕рдореБрджрд╛рдпреЛрдВ рдиреЗ рдЗрд╕ рд╕реНрдерд╛рди рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдЬреИрд╕реЗ рдПрдордПрд▓ / рд╣рд╛рд╕реНрдХреЗрд▓ рд╕рдореБрджрд╛рдп рдХреЗ рдкрд╛рд╕ рд╣реИред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЪрдпрди:

  • http://www.mlton.org/InfixingOperators - рдПрдордПрд▓ рдореЗрдВ рдЗрдиреНрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ /> , \> , </ , <\ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдмрд╛рдПрдБ / рджрд╛рдПрдБ рдЕрдиреБрднрд╛рдЧ / рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдкрд╕рдВрдж рд╣реИред

  • http://lambda.jstolarek.com/2012/03/function-composition-and-dollar-operator-in-haskell/ - . рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рд░рдЪрдирд╛ рдХрд╛ рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди рдФрд░ $ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ |> рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдПрдХ рдЙрдкрд╕реНрдерд┐рддрд┐ рдмрдирд╛рддрд╛ рд╣реИред)

  • https://haskell-lang.org/tutorial/operators - рд╣рд╛рд╕реНрдХреЗрд▓ рд╕рдВрдЪрд╛рд▓рдХ рд╢рдмреНрджрдХреЛрд╖, рдЬрд┐рд╕рдореЗрдВ >>= , =<< , >> рдХреЗ рдореЛрдирд╛рдж-рдкрд░рд┐рд╡рд╛рд░ рд╕рд╣рд┐рдд рдордЬрд╝реЗрджрд╛рд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред >=> , рдФрд░ <=< ред

рдЙрдкрд░реЛрдХреНрдд рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, R%>% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдпрджреНрдпрдкрд┐ рд╡рд╣ рднрд╛рд╖рд╛ рджрд┐рдирд╛рдВрдХрд┐рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдкрд╛рдЗрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИред рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рддрд╛ рд╣реИ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕, рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

x %>% { if(. < 5) { a(.) } else { b(.) } }

рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЕрдВрдд рдХреЗ рдмрдпрд╛рдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдКрдкрд░ рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рд░ рд╣реИ, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдбреЗрдЯрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде, рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╢рд╛рдпрдж рдХреЛрд╖реНрдардХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ?

рдореИрдВ рдПрдХ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдБ рдЬреЛ рдХреБрдЫ рджреГрд╢реНрдп рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ > рдкреНрд░рддреАрдХред рдпрд╣ рд╢реБрд░реБрдЖрддреА рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдХреНрдпреВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рднрд▓реЗ рд╣реА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд |> рдХреЗ рд╡рд░реНрддрдорд╛рди рдареЗрда рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ _are_ |> рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВ - рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдореЗрдВ |> рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдорд╛рддреНрд░ infix рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢рдХреНрддрд┐ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо x |> f |> g рдХрд╛ рдорддрд▓рдм g(f(x)) рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рд╢рд╛рдпрдж рдЖрдЧреЗ рдХрд┐рд╕реА рднреА рд╡реГрджреНрдзрд┐ рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред |> рдХреЛ рдПрдХ рдЧреИрд░-рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЬреЛ рдХрд┐ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ _typical_ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ |> _atypical_ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ - рдХреБрдЫ рднреА рдпрд╣ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЛ рддреЛрдбрд╝рдирд╛ рдЕрднреА рднреА рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП 1.x рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА |> рд╕рд╛рде рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рдореЗрдВ 1.0 рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп |> рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@StefanKarpinski рдЗрд╕ рд╕рдордп рдЯреЗрдмрд▓ рдкрд░ рднреА рдлрдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп |> рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдирд╛ рд░рд╣реА рд╣реИ? рдХреНрдпрд╛ рдпрд╣ 1.0 рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордп рдкрд░ рдЯреЗрдмрд▓ рдкрд░ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ?

@StefanKarpinski рдмрдирд╛ рд░рд╣реА рд╣реИред> рдЗрд╕ рд╕рдордп рдореЗрдЬ рдкрд░ рднреА рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛? рдХреНрдпрд╛ рдпрд╣ 1.0 рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордп рдкрд░ рдЯреЗрдмрд▓ рдкрд░ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдЗрд╕реЗ 0.7 рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ 1.0 рд╕реЗ рдПрдХрдореБрд╢реНрдд рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлрд┐рд░ рдЗрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ 1.x рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВред
рдЬреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЧреИрд░-рдкрд░рд┐рд╡рд░реНрддрдирдХрд╛рд░реА рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред

рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рдВ, рдпрд╣ рдореЗрдЬ рдкрд░ рд╣реИред

|> рдХреЛ рдХрд┐рд╕ рдкрдж рдкрд░ рдкреНрд░рддрд┐рдирд┐рдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? Lazy.jl рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди?

x |> f рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ f(x) ред

l> рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ ll> рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реБрдП рд╡рд░реНрддрдорд╛рди l> рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?

рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд┐рдирд╛ рдкрджрд╛рд╡рдирддрд┐ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдЗрд╕ рдмреАрдЪ рдереЛрдбрд╝реА рдХрдо рдЕрдЪреНрдЫреА рд╣реИ, рддреЛ рд╡реЗ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рднрд╡рд┐рд╖реНрдп рдореЗрдВ l> рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЬ рдкрд░ рд╡рд┐рдХрд▓реНрдк рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣ рдХреНрд╡реЗрд░реА рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдЖрд░ tidyverse рдореЗрдВ рдкрд╛рдЗрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИред рдкреВрд░реА рдмрд╛рдд рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ: рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╛рдд рд╕рд╛рд░рдгреАрдмрджреНрдз рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ io рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рджреЛ рдФрд░ рдмрд╣реБрдд рдХрд░реАрдм рдХреЗ рд╕рд╛рде), рдХреНрд╡реЗрд░реА рд╕рдВрдЪрд╛рд▓рди (рдЬреИрд╕реЗ dplyr) рдФрд░ рд╕рд╛рдЬрд┐рд╢ рд░рдЪрдиреЗ рдХреЗ рд╕рднреА (рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд╢рд╛рд╡рд╛рджреА рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЬрд▓реНрдж рд╣реА ggplot рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рд╕рднреА l> рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдмрдирд╛рддрд╛ рд╣реИ ...

рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдЯреЗрдмрд▓ рдкрд░ l> рд▓рд┐рдП рдХреБрдЫ рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд░рдЦрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдЕрдм рддрдХ рдЬреЛ рдореИрдВрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдмреЗрд╣рддрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдмрд╕ рдкрджрд╛рд╡рдирдд рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдХрдЯреНрдЯрд░рдкрдВрдереА рдХрджрдо рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдЧрд▓реАрдЪрд╛ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИред

рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рд┐рд░реНрдл x |> f рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ f(x) ред рдпрд╣ рдЙрд╕ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ рдЬреЛ |> рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╡реЗ рдЙрд╕ рдЪреАрдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрддреЗ рд╣реИрдВ рддрдм рддрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╡рд░реНрджреНрдзрди рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЪрд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП |> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдирдП рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд░рдЪрдирд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рд╣реИ, рдЬреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрд╣реБрдд рд╣реА рдкрддрд▓реА рд╣реИред

рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдирдП рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд░рдЪрдирд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рд╣реИ, рдЬреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрд╣реБрдд рд╣реА рдкрддрд▓реА рд╣реИред

рдХреНрдпрд╛ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдКрдкрд░ рд╕реЗ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛? |> рдЬреВрд▓рд┐рдпрд╛ 1.0 рдореЗрдВ ||> рдЖрдЬ рдХреЗ |> рдмрд░рд╛рдмрд░ рдХрд░реЗрдВред рдЬреВрд▓рд┐рдпрд╛ 1.0 рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рд╣реЛрдЧреА рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ |> рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХреЛ ||> рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рдХрд┐рд╕реА рдХреЛ |> рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕реЗ рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рд╕рдордп рджреЛрдиреЛрдВ ||> рдФрд░ |> рдЖрд╕рдкрд╛рд╕ рд╣реЛрдВрдЧреЗ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ||> рдзреАрд░реЗ-рдзреАрд░реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдлреАрдХрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЕрдЧрд░ рд╣рд░ рдХреЛрдИ |> рдХреЛ рдЕрдкрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗред рдФрд░ рдлрд┐рд░, рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдЬреВрд▓рд┐рдпрд╛ 2.0 рд╕рд┐рд░реНрдл ||> рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ) рдХ) рдЬреВрд▓рд┐рдпрд╛ 1.0 рдЯрд╛рдЗрдордлреНрд░реЗрдо рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рднреА рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдЦ) рдЕрдВрддрддрдГ |> рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдореЗрдЬ рдкрд░ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдЫреЛрдбрд╝ рджреЗрдВред

|>(x, f) = f(x)
|>(x, tuple::Tuple) = tuple[1](x, tuple[2:endof(tuple)]...) # tuple
|>(x, f, args...) = f(x, args...) # args

x = 1 |> (+, 1, 1) |> (-, 1) |> (*, 2) |> (/, 2) |> (+, 1) |> (*, 2) # tuple
y = 1 |> (+, 1, 1)... |> (-, 1)... |> (*, 2)... |> (/, 2)... |> (+, 1)... |> (*, 2)... # args

рдХрдИ рдмрд╛рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдФрд░ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

function fibb_tuple(n)
    if n < 3
        return n
    end
    fibb_tuple(n-3) |> (+, fibb_tuple(n-2), fibb_tuple(n-1))
end

function fibb_args(n)
    if n < 3
        return n
    end
    fibb_args(n-3) |> (+, fibb_args(n-2), fibb_args(n-1))...
end

function fibb(n)
    if n < 3
        return n
    end
    fibb(n-3) + fibb(n-2) + fibb(n-1)
end

n = 25

println("fibb_tuple")
<strong i="8">@time</strong> fibb_tuple(1)
println("fibb_args")
<strong i="9">@time</strong> fibb_args(1)
println("fibb")
<strong i="10">@time</strong> fibb(1)

println("tuple")
<strong i="11">@time</strong> fibb_tuple(n)
println("args")
<strong i="12">@time</strong> fibb_args(n)
println("fibb")
<strong i="13">@time</strong> fibb(n)
fibb_tuple
  0.005693 seconds (2.40 k allocations: 135.065 KiB)
fibb_args
  0.003483 seconds (1.06 k allocations: 60.540 KiB)
fibb
  0.002716 seconds (641 allocations: 36.021 KiB)
tuple
  1.331350 seconds (5.41 M allocations: 151.247 MiB, 20.93% gc time)
args
  0.006768 seconds (5 allocations: 176 bytes)
fibb
  0.006165 seconds (5 allocations: 176 bytes)

|>(x, tuple::Tuple) = tuple[1](x, tuple[2:endof(tuple)]...) рднрдпрд╛рдирдХ рд╣реИред
|>(x, f, args...) = f(x, args...) рдЕрдзрд┐рдХ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ рд▓реЗрдХрд┐рди рддреЗрдЬреА рд╕реЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ subject |> verb(_, objects) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рддрд░рд╣ verb(subject, objects) рджреЗрдирд╛ SVO рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ (рд▓реЗрдХрд┐рди рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ VSO рдпрд╛ VOS рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреВрд▓рд┐рдпрд╛ mutltidipatch рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╖рдп рд╡рд┐рд╖рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ SVO рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рддреЛ рд╣рдореЗрдВ (subject1, subject2) |> verb(_, _, object1, object2) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рддрд░рд╣ verb(subject1, subject2, object1, object2) рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред
рдпрд╣ MIMO рд╣реИ рдЕрдЧрд░ рдЗрд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ @oxinabox рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред

(x)f рд░реВрдк рдореЗрдВ f(x) (x)f рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?
(x)f(y) рджреЛрдиреЛрдВ рдХреЛ f(x)(y) рдФрд░ f(y)(x) рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕рд╣реА рдЪреБрдиреЗрдВ:

(x)f # f(x)
(x)f(y) # f(y)(x)
(x)f(y)(z) # f(y)(z)(x)
(x)(y)f(z) # f(z)(y)(x)
(a)(b)f(c)(d) # f(c)(d)(b)(a)
1(2(3, 4), 5(6, 7), 8(9, 10)) # 1(2(3, 4), 5(6, 7), 8(9, 10))
1 <| (2 <| (3, 4), 5 <| (6, 7), 8 <| (9, 10)) # 1(2(3, 4), 5(6, 7), 8(9, 10)), but 2 <| (3, 4) == 2((3, 4)) so currently emit error
3 |> 2(_, 4) |> 1(_, 5(6, 7), 8(9, 10)) # 1(2(3, 4), 5(6, 7), 8(9, 10))
((3)2(_, 4))1(_, 5(6, 7), 8(9, 10)) # 1(2(3, 4), 5(6, 7), 8(9, 10))
(3, 4) |> 2(_, _) |> 1(_, 5(6, 7), 8(9, 10)) # 1(2(3, 4), 5(6, 7), 8(9, 10))
((3, 4)2)1(_, 5(6, 7), 8(9, 10)) # 1(2(3, 4), 5(6, 7), 8(9, 10))

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ vararg рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рдирд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛:

(a + b)+(c + d) # +(c + d)(a + b) == (c + d)(a + b): Error

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдХрд▓реНрдк: рд╡рд┐рднрд╛рдЬрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝реЗрдВред F ... (x) desugar to (args ...) -> f (x, args ...)

рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХрд▓реА рд▓рд╛рдЗрдЯрд╡реЗрдЯ (рдореИрдиреБрдЕрд▓) рдХреНрдпреВрд░рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛:

#Basic example:
f(a,b,c,d) = #some definition
f...(a)(b,c,d) == f(a,b,c,d)
f...(a,b)(c,d) == f(a,b,c,d)
f...(a,b,c)(d) == f(a,b,c,d)
f...(a)...(b)(c,d) == f(a,b,c,d) # etc etc

# Use in pipelining:
x |> map...(f) |> g  |> filter...(h) |> sum

рдЖрдк рдХрдм рд╕реЗ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ? рдЬреВрд▓рд┐рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╢рд╛рдирджрд╛рд░ рдСрдкрд░реЗрдЯрд░ рд╣реИред рдореИрдВ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрдкреИрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред

I, e: f ... (x) == (args ...) -> f (x, args ...) рдЫреАрдВрдЯреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдордирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдиреА рд╣реИред

рд╡рд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддреА рд╣реИред рд╕рдВрднрд╡рддрдГ рдЖрдк рдХрднреА-рдХрднреА рдПрдХ рдЙрддреНрддрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдк рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдВрдд рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг f ... (a) ... (b) (c, d) == f (a, b, c, d) рдореЗрдВ рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрддрд┐рдо рд╕реЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ ... рдХреА рдХрдореА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред ред

рдЖрдк рд▓реМрдЯреЗ рд╣реБрдП рдлрдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ |> рдХреЗ рд╕рд╛рде рднреА рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред

@saolof

рдореВрд▓ рдЙрджрд╛рд╣рд░рдг:

f (рдП, рдмреА, рд╕реА, рдбреА) = #some рдкрд░рд┐рднрд╛рд╖рд╛
рдЪ ... (рдП) (рдмреА, рд╕реА, рдбреА) == рдПрдл (рдП, рдмреА, рд╕реА, рдбреА)
рдЪ ... (рдП, рдмреА) (рд╕реА, рдбреА) == рдПрдл (рдП, рдмреА, рд╕реА, рдбреА)
рдЪ ... (рдП, рдмреА, рд╕реА) (рдбреА) == рдПрдл (рдП, рдмреА, рд╕реА, рдбреА)
f ... (a) ... (b) (c, d) == f (a, b, c, d) # рдЖрджрд┐

рдлрдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдкреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдЕрд░реНрде рдореЗрдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред
рдЖрдкрдиреЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд┐рдПред
рдлрдВрдХреНрд╢рди рдЪреИрдирд┐рдВрдЧ рдореЗрдВ, рдЖрдк рдЪреЗрди рдХреЗ рд╕рд╛рде рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╕рднреА рд╕реНрдЯреЗрдкреНрд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ @StefanKarpinski рд╕рд╣реА рд╣реИ, рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрдм рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕реНрдХреЗрд▓рд░ рдЖрдЗрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред

- (рдХрд╛рдЯрд╛) -

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рд╡реНрдпрд░реНрде рдФрд░ рдЕрдкрдардиреАрдп рд╣реИред
рд╕реНрдкрд╖реНрдЯ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдореЗрд░рд╛ рджреВрд╕рд░рд╛ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ)ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рддрдиреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ, рдореБрдЭреЗ рдлрдВрдХреНрд╢рди-рдХрд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ @saolof рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ рд╢рдмреНрджрд╛рд░реНрде рдЖрдкрддреНрддрд┐рдпрд╛рдБ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣реА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред

рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрддреНрддрд░ рдХреЗ рдЖрд░рд╛рдо рд╕реЗ рднреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

ctranspose(f) = (a...) -> (b...) -> f(a..., b...)

map'(+)(1:10)

map'(+)'(1:10, 11:20)(21:30)

(+)'(1,2,3)(4,5)

1:10 |> map'(x->x^2) |> filter'(iseven)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХрд╛ рдорд╛рд░реНрдЧ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо mapтИШ(+, 1:10) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдкрд╣рд▓реЗ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП mapтИШ(_, 1:10) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд░реА рдУрдкрд░реЗрдЯрд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░реА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рдПрд╣, рд╡рд╣ рдЪрддреБрд░ рд╣реИ, @ рдорд╛рдпрдХреЗрдиреЗрд╕ред

рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреА рдЕрддрд┐рд╢рдпрддрд╛ рдпрд╣рд╛рдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рд╕рдорд╛рдзрд╛рди ctranspose рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ ...

(рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде 1:10 |> map'(x->x^2) |> filter'(iseven) рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП getting% рд╣реВрдВ!)

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП adjoint рдСрдкрд░реЗрдЯрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рдорд╛рдг рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдлрд╝рдВрдХреНрд╢рди рдХрд░реА рдиреЛрдЯрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╢рд╛рдпрдж рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдпреВрдирд┐рдХреЛрдб рдСрдкрд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? http://www.fileformat.info/info/unicode/char/1f35b/index.htm

(рдорд╛рдлрд╝ рдХрд░рдирд╛...)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реИрдВрдмрдбрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП _ рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рддрд░реАрдХрд╛ рд╣реИ

@bramtayl рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдорд╛рдЗрдХрдЗрдиреНрд╕ рдХреЗ рд╕рдВрдкрд╛рджрди рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╕рд╣-рдХрд▓рд╛рдХрд╛рд░ - рд╕реНрдЯреИрдВрдбрдЕрд▓рд┐рди рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЛ @stevengj рдХреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдорд╛рдЗрдХ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХрд░реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдЧрд╛ред рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЗрд╕рдХреЗ рдЕрдВрджрд░ _ s рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рдкрд░рд┐рд╕реАрдорди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реАрдиреЗ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВрдЧреЗред

рдЖрд╣ рдорд┐рд▓ рдЧрдпрд╛

рдХрд┐ рдпрд╣ LazyCall.jl рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ

рдпрд╛ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡: https://github.com/JuliaLang/julia/pull/24990#issuecomment -350490856

рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдиреЛрдЯ рдкрд░:

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП adjoint рдСрдкрд░реЗрдЯрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╢рд╛рдпрдж рдПрдХ рдзреНрд╡рдирд┐ рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрдкрдиреА рдЖрд╢рд╛рдУрдВ рдХреЛ рдЖрд╡рд╛рдЬ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдСрдкрд░реЗрдЯрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред 1:10 |> map'(x->x^2) рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛рдлреА рдХрдо рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдХреЛрдИ рднреА рдЪрд░рд┐рддреНрд░ ' рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдпреВрдирд┐рдХреЛрдб рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╛ рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ LaTeX-expansions рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)ред

рд╕рд╣рд╛рдпрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдлрд╛рдЯрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  • рдПрдХ рд░реЗрдЦреАрдп (рд░реИрдЦрд┐рдХ) рдкрд╛рдЗрдкрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ
  • рдЕрдВрджрд░, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ

    • рдмрд╛рдж рдХреЗ рдмрдЬрд╛рдп рдкрд╣рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛

рдЗрд╕рд▓рд┐рдП

  • splat рдПрдХ рд▓рд╛рдкрддрд╛ itter arg рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдЪреНрдЪ рдХреНрд░рдо рдХрд╛ рдЫрдЬреНрдЬрд╛ , (
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣рд┐рд▓рд╛ред

рдЙрджрд╛рд╣рд░рдг

1:10
    |> map(...x->x^2)
    |> filter(...iseven)

рдЙрджрд╛рд╣рд░рдг реи

genpie = (r, a=2pi, n=12) ->
  (0:n-1) |>
      map(...i -> a*i/n) |>
      map(...t -> [r*cos(t), r*sin(t)]) 

рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

elmap = f -> (s -> map(f,s))

genpie = (r, a=2pi, n=12) ->
  (0:n-1) |>
      elmap(i -> a*i/n) |>
      elmap(t -> [r*cos(t), r*sin(t)]) 

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪрд░реНрдЪрд╛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд / рд▓рдЪреАрд▓реА рдЪреИрдирд┐рдВрдЧ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рд╣реИ ... рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рдкреЛрд╕реНрдЯ рдкрд░, рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд░рдирд╛ рдЕрднреА рдереЛрдбрд╝рд╛ рд╕рдВрднрд╡ рд╣реИ, рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рдеред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗрд╡рд▓ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ / рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реИред

mutable struct T
    move
    scale
    display
    x
    y
end

function move(x,y)
    t.x=x
    t.y=y
    return t
end
function scale(c)
    t.x*=c
    t.y*=c
    return t
end
function display()
    @printf("(%f,%f)\n",t.x,t.y)
end

function newT(x,y)
    T(move,scale,display,x,y)
end


julia> t=newT(0,0)
T(move, scale, display, 0, 0)

julia> t.move(1,2).scale(3).display()
(3.000000,6.000000)

рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдУрдУрдкреА рдХреЗ рд╕рдорд╛рди рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "рдХреНрд▓рд╛рд╕ рдореЗрдердбреНрд╕" рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд░реВрдк рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреНрдпрд╛ рд╣реИрдВред

@ivanctong рдЖрдкрдиреЗ рдЬреЛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдзрд┐рдХ рд╣реИред

рдХрд╣рд╛ рдХрд┐, рдлрдВрдХреНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреИрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдЬреВрд▓рд┐рдпрд╛ рдХреА рдЖрддреНрдорд╛ рдФрд░ рд╕реМрдВрджрд░реНрдп рд╕реМрдВрджрд░реНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рддрд╛ рд╣реИред

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЕрдореГрдд рд╡рд╣ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдИрдВ рдУрд░ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдЧрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ "elixir" |> String.ends_with?("ixir") рдЬреИрд╕рд╛ рдХреБрдЫ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВред

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

рддреЛ рдХреНрдпрд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ?

рдХреГрдкрдпрд╛ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░рд╡рдЪрди рдЪрд░реНрдЪрд╛ рдордВрдЪ рдкрд░ рдкреНрд░рд╢реНрди рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред

рд╣реИрдХрд┐рдВрдЧ рдХреЗ рдПрдХ рдлрд┐рдЯ рдореЗрдВ (рдФрд░ рд╕рдВрджрд┐рдЧреНрдз рдирд┐рд░реНрдгрдп!?) рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рдмрдВрдзрди рдХреА рдЬрдХрдбрд╝рди рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ:

https://github.com/c42f/MagicUnderscores.jl

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/JuliaLang/julia/pull/24990 рдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдЕрд╡рд▓реЛрдХрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреБрдЫ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ _ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЛ рдХрд╕рдХрд░ рдмрд╛рдБрдзрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рд╢рд┐рдерд┐рд▓ред MagicUnderscores рдпрд╣ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди (рдкреНрд░рд╕рд╛рд░рдг рдорд╢реАрдирд░реА рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ) рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ

julia> <strong i="12">@_</strong> [1,2,3,4] |> filter(_>2, _)
2-element Array{Int64,1}:
 3
 4

julia> <strong i="13">@_</strong> [1,2,3,4] |> filter(_>2, _) |> length
2

"рд╕рд┐рд░реНрдл рдХрд╛рдо"ред ( @_ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреВрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред)

рдХреБрдЫ рдмрджрд▓рд╛рд╡ @MikeInnes рд╕реБрдЭрд╛рд╡ рдореЗрд░реА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗ (рдЖрдорддреМрд░ рдкрд░ do рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░, рдореИрдк, рдХрдо, рдЧрдгрдирд╛, рдЬрд╝рд┐рдк рдЖрджрд┐ рдХреА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ)ред

c(f) = (a...) -> (b...) -> f(a..., b...)

1:10 |> c(map)() do x
    x^2
end |> c(filter)() do x
    x > 50
end

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЕрдм рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ' рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рд╣реИ:

1:10 |> x -> map(x) do x
    x^2
end |> x -> filter(x) do x
    x > 50
end

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

cmap = c(map)
cfilter = c(filter)
cetc = c(etc)
...

1:10 |> cmap() do x
    x^2
end |> cfilter() do x
    x > 50
end |> cetc() do ...

1.0 рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА adjoint рдХреЗ рдмрдЬрд╛рдп ctranspose ред рдЖрдк рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

julia> Base.getindex(f::Function, x...) = (y...) -> f(x..., y...)

julia> 1:10 |> map[x -> x^2] |> filter[x -> x>50]
3-element Array{Int64,1}:
  64
  81
 100

рдЕрдЧрд░ рд╣рдо apply_type рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рдо map{x -> x^2} рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

@ рдорд╛рдпрдХреЗрдиреЗрд╕ рдиреЗ рдореИрдВ рдмрд╕ рдпрд╣реА рдЪреБрд░рд╛рдпрд╛ рдерд╛

рдПрдХ рджреЗрд░ рдФрд░ рдереЛрдбрд╝рд╛ рддреБрдЪреНрдЫ рдпреЛрдЧрджрд╛рди - рддрд░реНрдХ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рддрд▓рдЫрдЯ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ:

VERSION==v"0.6.2"
import Base: ctranspose, transpose  
ctranspose(f::Function) = (a...) -> ((b...) -> f(a..., b...))  
 transpose(f::Function) = (a...) -> ((b...) -> f(b..., a...))

"little" |> (*)'''("Mary ")("had ")("a ") |> (*).'(" lamb")

рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдереНрд░реЗрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВ ред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╣реАрдВ рдЬреВрд▓рд┐рдпрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╣реИ?

рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдереНрд░реЗрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВ ред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╣реАрдВ рдЬреВрд▓рд┐рдпрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╣реИ?

https://github.com/MikeInnes/Lazy.jl

рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдереНрд░реЗрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВ ред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╣реАрдВ рдЬреВрд▓рд┐рдпрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╣реИ?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо 10 рд╣реИрдВред
рдореИрдВрдиреЗ рдПрдХ рд╕реВрдЪреА рдереНрд░реЗрдб рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреАред
https://github.com/JuliaLang/julia/issues/5571#issuecomment -205754539

рдХреНрдпрд╛ рдЖрдк рдЕрдиреНрдп рджреЛ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд▓рд╛рдЗрдЯрд╡рд┐рдХреИ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЪреВрдВрдХрд┐ |> рдСрдкрд░реЗрдЯрд░ рдЕрдореГрдд рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЧреБрдордирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП?
рдЕрдореГрдд тАЛтАЛрдореЗрдВ рдЖрдк рдПрдХ рдирдП рдмреЗрдирд╛рдореА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП &expr рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд┐рддреАрдп рддрд░реНрдХреЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП &n ( &1 рдкрд╣рд▓реА рджрд▓реАрд▓реЗрдВ рд╣реИрдВ, &2 рджреВрд╕рд░реА рд╣реИ, рдЖрджрд┐ред)
рдЕрдореГрдд тАЛтАЛрдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдорд╛рди рд╣реИрдВ, (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди &(&1 + 1).(10) рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╖реНрдардХ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдбреЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ

&(&1 * 10)        # same as: v -> v * 10
&(&2 + 2*&5)      # same as: (_, x, _, _, y) -> x + 2*y
&map(sqrt, &1)    # same as: v -> map(sqtr, v)

рдЗрд╕рд▓рд┐рдП рд╣рдо |> рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

1:9 |> &map(&1) do x
  x^2
end |> &filter(&1) do x
  x in 25:50
end

рдХреЗ рдмрдЬрд╛рдп

1:9 |> v -> map(v) do x
  x^2
end |> v -> filter(v) do x
  x in 25:50
end

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдкрдВрдХреНрддрд┐ 2 рдФрд░ 3 рдХреЛ .|> &(&1^2) рдпрд╛ .|> (v -> v^2)

_ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐рдЧрдд рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рдордиреЗ & рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ (рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рдВрдХрд▓рдХ)ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ & рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ? , _ , $ рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рдмрджрд▓реЗ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ рдорд╛рдорд▓рд╛ред

рд╕реНрдХреЗрд▓ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП _ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП _ , рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рджреЛрд╣рд░рд╛ рдпрд╛ рдЙрд▓рдЯ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ) рддрд░реНрдХреЛрдВ рдХрд╛ рдХреНрд░рдо)ред рдЗрд╕рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рднреА рдирд╣реАрдВ рд╣реИ (рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реБрдЭрд╛рд╡ рдореЗрдВ & ) рдЬреЛ рднрд╛рд╡реЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдПрдХ рдкреНрд░реИрдХреНрдЯрд┐рд╢рдирд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рдФрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ рдЗрдЪреНрдЫрд┐рдд рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдорд╛рдиреНрдпрддрд╛ рджреА рдЬрд╛рдПрдЧреАред

рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╕рдордп рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛред

рд▓реЗрдХрд┐рди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, $ рдХреА рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкрд░рдВрдкрд░рд╛ рд╣реИред рдкрд░рд┐рдЪрд┐рдд рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ |> рдЕрдореГрдд тАЛтАЛрд╕реЗ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдореГрдд рд╕реЗ & рднреА рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕ рдореЛрдб рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡рд╣рд╛рдБ рдкреВрд░реНрд╡ рдЕрдореГрдд рдХреЗ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ ...)

рдПрдХ рдЪреАрдЬ рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рд╡рд╣ рд╢рд╛рдпрдж рдХрднреА рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ N рддрд░реНрдХ рд▓реЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди N рд╕реЗ рдХрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред $1 , $2 , $3 рд╢рд░реАрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ 3 рддрд░реНрдХреЛрдВ рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ 4 рддрд░реНрдХреЛрдВ (рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП) рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЗрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред (рдкреНрд░рддреНрдпреЗрдХ рдПрди рдХреЗ рд▓рд┐рдП рдкрд╣рдЪрд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ред) рдпрд╣ |> рдмрд╛рдж рд▓рдЧрд╛рдиреЗ рдХреЗ рдкреНрд░реЗрд░рдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред

рдореИрдВрдиреЗ Colon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ @MikeInnes рдЯреНрд░рд┐рдХ рдХреЛ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛, рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЧрд┐рд░рдлреНрддрд╛рд░ рдереЗ:

struct LazyCall{F} <: Function
    func::F
    args::Tuple
    kw::Dict
end

Base.getindex(f::Function,args...;kw...) = LazyCall{typeof(f)}(f,args,kw)

function (lf::LazyCall)(vals...; kwvals...)

    # keywords are free
    kw = merge(lf.kw, kwvals)

    # indices of free variables
    x_ = findall(x->isa(x,Colon),lf.args)
    # indices of fixed variables
    x! = setdiff(1:length(lf.args),x_)

    # the calling order is aligned with the empty spots
    xs = vcat(zip(x_,vals)...,zip(x!,lf.args[x!])...)
    args = map(x->x[2],sort(xs;by=x->x[1]))

    # unused vals go to the end
    callit = lf.func(args...,vals[length(x_)+1:end]...; kw...)

    return callit
end

[1,2,3,4,1,1,5]|> replace![ : , 1=>10, 3=>300, count=2]|> filter[>(50)]  # == [300]

log[2](2) == log[:,2](2) == log[2][2]() == log[2,2]()  # == true

рдпрд╣ рд▓реИрдореНрдмреНрдбрд╛ рдпрд╛ рдереНрд░реЗрдбрд┐рдВрдЧ рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕реБрдкрд░ рдХреВрд▓: рдкреА

рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, https://github.com/JuliaLang/julia/pull/24990 рдкрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЪрд░реНрдЪрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рд╣реИ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЖрдкрдХреЛ https://github.com/c42f/Underscores.jl рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд▓рд┐рдП _ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди-рдЪреЗрдирд┐рдВрдЧ-рдлреНрд░реЗрдВрдбрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрддрд╛ рд╣реИред @jpivarski рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЗрд╕реЗ рдХрд╛рдлреА рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдЖрд░рд╛рдорджрд╛рдпрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

iamed2 picture iamed2  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yurivish picture yurivish  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TotalVerb picture TotalVerb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

StefanKarpinski picture StefanKarpinski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manor picture manor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ