"рдлрдВрдХреНрд╢рдирд▓ рдерд┐рдВрдХрд┐рдВрдЧ" рдХреЗ
рдкрд╣рд▓реЗ рдФрд░
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВрдиреЗ рдлрдВрдХреНрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЬрд╛рд╡рд╛ рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрд╣ рднрд╛рдЧ рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рдЗрд╕рдореЗрдВ рдореИрдВ рд╕реНрдХрд▓рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдФрд░ рдХреБрдЫ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдореБрджреНрджреЛрдВ, рдЬреИрд╕реЗ рдХрд┐
рдХрд░реА ,
рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЪрд░реНрдЪрд╛
рдХрд░реВрдВрдЧрд╛ ред
рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг
рдореИрдВрдиреЗ рд╕реНрдХрд╛рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдВрдд рдореЗрдВ рд╕рд╣реЗрдЬрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рд░рд╣рд╕реНрдпрдордп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдПред (рдореБрдЭреЗ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рд╣реИ: рдЖрдкрдХреЛ рдЗрд╕реЗ
рд╕рд╣реА ,
рдирд┐рд░рд░реНрдердХ рдпрд╛
рдЕрдкрд░реНрдпрд╛рдкреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рд╡рд╣ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рднрд╛рдЬрдХ, рд╕реНрд╡рдпрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдХ рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрд╕рдХреЗ рдХреБрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХрд╛ рдпреЛрдЧ рд╕реНрд╡рдпрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ред рдЕрдкрд░реНрдпрд╛рдкреНрдд - рдХрдо)
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1. рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдгpackage com.nealford.conf.ft.numberclassifier object NumberClassifier { def isFactor(number: Int, potentialFactor: Int) = number % potentialFactor == 0 def factors(number: Int) = (1 to number) filter (number % _ == 0) def sum(factors: Seq[Int]) = factors.foldLeft(0)(_ + _) def isPerfect(number: Int) = sum(factors(number)) - number == number def isAbundant(number: Int) = sum(factors(number)) - number > number def isDeficient(number: Int) = sum(factors(number)) - number < number }
рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реЛ, рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ
factors()
рдФрд░
sum()
ред
factors()
рд╡рд┐рдзрд┐ рдПрдХ рджреА рдЧрдИ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ 1 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реВрдЪреА рд▓реЗрддреА рд╣реИ рдФрд░ рдПрдХ рдорд╛рдирдХ рдорд╛рди
filter()
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдлрд╝рд┐рд▓реНрдЯрд░ рдорд╛рдирджрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рджрд╛рдИрдВ рдУрд░ рдХреЛрдб рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рдЕрдиреНрдпрдерд╛ рдПрдХ рд╡рд┐рдзреЗрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -
рдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ * , рдЬреЛ рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп
_
рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╕реНрдХрд╛рд▓рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдСрдкрд░реЗрдЯрд░ рдХреА рддрд░рд╣
filter()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд░реНрдорд╛рдг
(1 to number).filter((number % _ == 0))
рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред
sum
рд╡рд┐рдзрд┐ рдкрд░рд┐рдЪрд┐рдд
рддрд╣ рдмрд╛рдПрдВ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (
foldLeft()
рдХреЛ
foldLeft()
рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп
_
рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреЗрддрд╛ рд╣реИред
foldLeft()
рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЙрд╕реА рддрд░рд╣ рдХреА рдирд╛рдорд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
- рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реВрдЪреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
- рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реВрдЪреА рдХреЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдкрд░ рд╕рдорд╛рди рд╕рдВрдЪрд╛рд▓рди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
- рд╕реВрдЪреА рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд╣реИред
рдпрд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ: 0 рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдкрд╣рд▓рд╛ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВ, рдкрд░рд┐рдгрд╛рдо рд▓реЗрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рддрдХ рдЬрд╛рд░реА рд░рдЦреЗрдВред
рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рджрд┐рдЦрд╛рдП рдереЗ, рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ - рд╕реНрдХрд╛рд▓рд╛рд╕реНрдЯред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2 рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдкрд░реАрдХреНрд╖рдг
isPerfect()
1
isPerfect()
рд╕реВрдЪреА рд╕реЗ
isPerfect()
рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2. рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг @Test def negative_perfection() { for (i <- 1 until 10000) if (Set(6, 28, 496, 8128).contains(i)) assertTrue(NumberClassifier.isPerfect(i)) else assertFalse(NumberClassifier.isPerfect(i)) }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдХреА рддрд░рд╣, рдореИрдВ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рджреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдХреЛрдб рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рд╕реНрд╡рдпрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реА рдмрд╛рдд,
if
рдореЗрдВ рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрд░рд╛ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдПрдХ рдЕрдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред 3 рдХреА рд╕реВрдЪреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рджрд┐рдЦрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╢рдмреНрджреЛрдВ рдореЗрдВред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3. рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг @Test def alternate_perfection() { assertEquals(List(6, 28, 496, 8128), (1 until 10000) filter (NumberClassifier.isPerfect(_))) }
3 рдХреА рд╕реВрдЪреА рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ 1 рд╕реЗ 100 00 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд╣реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреНрдЮрд╛рдд рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдмрд░рд╛рдмрд░ рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реЛрдЪ рди рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдХрд░реА
рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдерд╛, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдЖрдо рд╣реИред рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕рд┐рдВрдЧ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
filter()
рд╕реВрдЪреА 3 рдореЗрдВ
filter()
рд╡рд┐рдзрд┐ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрд▓рдЧ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдкреБрд░рд╛рдиреА, тАЛтАЛрдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рджреБрдирд┐рдпрд╛ рд╕реЗ рдЖрдП рд╣реИрдВ, рддреЛ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдкреБрд╕реНрддрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди
** рд╕реЗ рдкреИрдЯрд░реНрди рд╡рд┐рдзрд┐ рд╡рд┐рдзрд┐ рд╕реЗ рдХрд░реЗрдВред рд╡рд╣ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рддрдХ рд╡рд┐рд╡рд░рдг рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЯрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдореВрд░реНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рддреИрдпрд╛рд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛
рдХрд░реА рд╣реИ ред рдЧрдгрд┐рддрдЬреНрдЮ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд░реА (рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдирд╛рдо рдЙрдирдХреЗ рд╕рдореНрдорд╛рди рдореЗрдВ рднреА рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рдирд╛рдо рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛, рдХрд░реАрдХрд░рдг рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╣реИред рдпрд╣ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рддрдХрдиреАрдХ рдЬреЛ рдХрдо рдЕрд░реЗрдЯреА рдХреЗ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╣реИред рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЛрдб 4 рдореЗрдВ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдХрд┐ рдХрд░реА рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4. рдЧреНрд░реВрд╡реА рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ def product = { x, y -> return x * y } def quadrate = product.curry(4) def octate = product.curry(8) println "4x4: ${quadrate.call(4)}" println "5x8: ${octate(5)}
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4 рдореЗрдВ, рдореИрдВрдиреЗ
product
рдХреЛ рдХреЛрдб рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИред рдмрд┐рд▓реНрдЯ-рдЗрди рдЧреНрд░реВрд╡реА
curry()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдХреЛрдб,
quadrate
рдФрд░
octate
рджреЛ рдирдП рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ
product
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
octate
ред Groovy рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ: рдЖрдк рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрд▓ () рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреАрдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмреНрд░реИрдХреЗрдЯ рдХреА рдПрдХ рдЬреЛрдбрд╝реАред
рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рджреЛрд╣рд░рд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред Groovy рджреЛрдиреЛрдВ рддрдХрдиреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
curry()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5. рдХрд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░реВрд╡реА рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдХрд░реА рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ def volume = { h, w, l -> return h * w * l } def area = volume.curry(1) def lengthPA = volume.curry(1, 1)
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5 рдореЗрдВ рд╡реЙрд▓реНрдпреВрдо рдХреЛрдб рдмреНрд▓реЙрдХ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЙрдХреНрд╕ рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рддрд░реНрдХ
volume
рдХреЛ рдареАрдХ рдХрд░рдХреЗ 1. рдПрдХ
area
рдХреЛрдб рдмреНрд▓реЙрдХ (рдЬреЛ рдЖрдпрдд рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ) рдмрдирд╛рддрд╛ рд╣реВрдВред
volume
рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдФрд░ рдХрд░реА рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
lengthPA
рдкрд╣рд▓реЗ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдХреЗ рдПрдХ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lengthC рджреЛ рдмрд╛рд░
lengthC
рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░ рдмрд╣реБрдд рд╕реВрдХреНрд╖реНрдо рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реА рдФрд░ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдПрдХ рддреНрд░реБрдЯрд┐
*** рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд╝рдВрдХреНрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЖрдкрдХреЛ рд╕рдорд╛рди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдЯреВрд▓ рджреЗрддрд╛ рд╣реИред рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рдкреБрди: рдЙрдкрдпреЛрдЧ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд░реА рдФрд░ рд░рдЪрдирд╛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6 рдореЗрдВ рдЧреНрд░реВрд╡реА рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6. рд░рдЪрдирд╛ рдФрд░ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди def composite = { f, g, x -> return f(g(x)) } def thirtyTwoer = composite.curry(quadrate, octate) println "composition of curried functions yields ${thirtyTwoer(2)}"
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6 рдореЗрдВ, рдореИрдВ рдПрдХ
composite
рдХреЛрдб рдмреНрд▓реЙрдХ рдмрдирд╛рддрд╛ рд╣реВрдВ рдЬреЛ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде, рдореИрдВ рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
thirtyTwoer
рдмрдирд╛рддрд╛
thirtyTwoer
ред
рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдХрд░реАрдиреЗ рд╕реЗ рдЖрдк рдЙрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреИрдЯрд░реНрди рд╡рд┐рдзрд┐ рдкреИрдЯрд░реНрди рдЬреИрд╕реЗ рддрдВрддреНрд░ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реВрдЪреА рд╕рдВрдЦреНрдпрд╛ 7 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдмрд╕
incrementer
рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдХреЛрдб рдмреНрд▓реЙрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 7. рднрд╡рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ def adder = { x, y -> return x + y } def incrementer = adder.curry(1) println "increment 7: ${incrementer(7)}"
рд╕реНрдХреЗрд▓ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпреВрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 8 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 8. рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ object CurryTest extends Application { def filter(xs: List[Int], p: Int => Boolean): List[Int] = if (xs.isEmpty) xs else if (p(xs.head)) xs.head :: filter(xs.tail, p) else filter(xs.tail, p) def dividesBy(n: Int)(x: Int) = ((x % n) == 0) val nums = List(1, 2, 3, 4, 5, 6, 7, 8) println(filter(nums, dividesBy(2))) println(filter(nums, dividesBy(3))) }
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 8 рдореЗрдВ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐
filter()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
dividesBy()
рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛
dividesBy()
ред рдореИрдВ
filter()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ
dividesBy()
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдЬрдм рдореИрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ
dividesBy()
рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ
dividesBy()
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред
рдкреБрдирд░рд╛рд╡рд░реНрддрди рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ
рдлрд╝рдВрдХреНрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ рдЕрдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ, рдЬреЛ (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) "рдПрдХ рдЖрддреНрдо-рд╕рдорд╛рди рдЪреАрдЬрд╝ рдореЗрдВ рдХреБрдЫ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛" рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ, рдпрд╣ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдБрдЪрдирд╛ рдХрд┐ рдХреЙрд▓ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ)ред рдЕрдХреНрд╕рд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣рдореЗрдВ рдПрдХ рдРрд╕реЗ рдХреЛрдб рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдорд╛рдзрд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд┐рдХреБрдбрд╝рдиреЗ рд╡рд╛рд▓реА рд╕реВрдЪреА рдкрд░ рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдкреБрдирд░рд╛рд╡реГрддреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдорд╛рдирджрдВрдб рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рд▓реВрдк рдореЗрдВ рд▓реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9 рдЧреНрд░реВрд╡реА рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9. рдЧреНрд░реВрд╡реА рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ def filter(list, criteria) { def new_list = [] list.each { i -> if (criteria(i)) new_list << i } return new_list } modBy2 = { n -> n % 2 == 0 } l = filter(1..20, modBy2) println l
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9 рдореЗрдВ
filter()
рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдФрд░ рдЪрдпрди рдорд╛рдирджрдВрдб (рдХреЛрдб рдмреНрд▓реЙрдХ) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред рдЕрдВрджрд░, рдпрд╣ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдФрд░ рддрддреНрд╡ рдЬреЛрдбрд╝рдХрд░ рдирдИ рд╕реВрдЪреА рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рд╕реВрдЪреА 8 рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдирдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕реВрдЪреА рдХреЛ рджреЛ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ: рд╢реБрд░реБрдЖрдд рдореЗрдВ (рд╕рд┐рд░ рдХреЗ рдореВрд▓реНрдп) рдФрд░ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреАред рдХрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдореБрд╣рд╛рд╡рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред
filter()
рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ - рдпрд╣ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрдд рд╣реИред рдпрджрд┐ рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╢рд░реНрдд рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдорд╛рди рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рддрддреНрд╡ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ), рд╣рдо рдЗрд╕ рддрддреНрд╡ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдирдИ рд╕реВрдЪреА рдФрд░ рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рд╢реЗрд╖ рддрддреНрд╡реЛрдВ (рд╕рд┐рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХрд╛рд▓рд╛ рднрд╛рд╖рд╛ рд╕реВрдЪреА рдСрдкрд░реЗрдЯрд░ рд╣рдореЗрдВ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреА рдЕрдЪреНрдЫреА рдкрдардиреАрдпрддрд╛ рдФрд░ рдЖрд╕рд╛рди рдзрд╛рд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдпрд╣ рдЖрдкрдХреЗ рдЯреВрд▓рдмреЙрдХреНрд╕ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдпрддрд╛ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдПрдВ рдЗрд╕реЗ рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рджреЗрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдХрд░, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдПрдВ рдЗрд╕реЗ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдмрдирд╛рддреА рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реЛрдЪ рдХреА рджреБрдирд┐рдпрд╛ рдХреА рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╕рдВрдпреЛрдЧрд╡рд╢, рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдмрддрд╛рдП рдЧрдП рдереЗред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рд╣реИред рдХрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЕрдХреНрд╕рд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреВрд▓ рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред
рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛: рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ред
рдиреЛрдЯ
* - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рдпрд╣рд╛рдБ рдПрдХ рдЧрд▓рддреА рдХреАред
_
рдмрдВрдж рд╣реЛрдиреЗ рдореЗрдВ рд╕рдВрдмрджреНрдз рдЪрд░ рдХреЗ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдп рдХреЛ
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдмреЗрдирд╛рдореА рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ
implicit
рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде рд╣реЛрддрд╛ рд╣реИред
** - рд░реВрд╕реА рдЕрдиреБрд╡рд╛рдж рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ "рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдЯреНрд░рд┐рдХреНрд╕" рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рда рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдЗрд╕рд╕реЗ рдкреБрд╕реНрддрдХ рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВред
*** - рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдЕрдиреБрднрд╛рдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд░реА рдФрд░ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрд╣реБрдд рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреБрдирд╢реНрдЪ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж