рдПрд░реНрд▓рд╛рдВрдЧ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рд╕рдВрдпреЛрдЬрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)

- ... рддреЛ рдореИрдВ рдЙрд╕реЗ рдереВрдерди рджреЗрддрд╛ рд╣реВрдВ ... рдирд╣реАрдВ, рдЖрдк рд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ!
"рдЗрд╕ рддрдереНрдп рдХрд╛ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрддреЗ," рдкреИрдирд┐рдХреЛрд╡рд╕реНрдХреА рдиреЗ рдкрд╛рдЦрдВрдбреА рдврдВрдЧ рд╕реЗ рдХрд╣рд╛ред - рдмреЗрдВрдбрд░ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рдЖрдИред рдЗрд▓рдлрд╝, рдИред рдкреЗрдЯреНрд░реЛрд╡ред рдЧреЛрд▓реНрдбрди рдмрдЫрдбрд╝рд╛ ред

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

рд╢рд╛рдпрдж рд╣рд░ рдХреЛрдИ рдЬреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрд░рд▓рд╛рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЦреБрдж рдХреЛ рд╢реВрд░рд╛ рдмрд╛рд▓рдЧрд╛рдиреЛрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХрдорд╛рддреНрд░ рд╕реБрд▓рдн рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: "рдЖрдк рд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрддреЗ ..."ред рдПрд░рд▓реИрдВрдЧ рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЪрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдЪрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬрдорд╛ рдХрд░рдирд╛ред (рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ "рдЧреНрд▓реЛрдмрд▓ рдорд▓реНрдЯреАрдкрд▓-рдЪреЗрдВрдЬрд┐рдВрдЧ рд╡реИрд░рд┐рдПрдмрд▓" рдХреА рдПрд░рд▓реИрдВрдЧ-рд╢реИрд▓реА рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╣реИрд╢ рд╢рдмреНрджрдХреЛрд╢ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░-рдбрд┐рдлрд╛рдЗрдиреНрдб рдХреА-рд╡реИрд▓реНрдпреВ рдкреЗрдпрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдбрд╛рд▓реЗ рдЧрдП рд╣реИрдВ (рдХреА, рд╡реИрд▓реНрдпреВ)ред (рдХреБрдВрдЬреА) рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп, рд▓реЗрдХрд┐рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмреБрд░реА рд╢реИрд▓реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЕрд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ ( http://www.erlang.org/doc/man/erlang.html\#put-2 )ред рдирддреАрдЬрддрди, рдПрдХ рдкрд╛рд╢ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рдВрдЪрдп рдХреЗрд╡рд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░ рдХрд╛ рд╕рдВрдЧрдардиред (рдмреЗрд╢рдХ, рд▓реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рд╕рдВрдЪрдп рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдлрд╝реЙрд░рдЪреНрдпреВ (рдлрд╝рдВрдХреНрд╢рди, рд╕реВрдЪреА), рд╕реВрдЪрд┐рдпрд╛рдБ: foldl (рдлрд╝рдВрдХреНрд╢рди, StartValue, рд╕реВрдЪреА), рд╕реВрдЪрд┐рдпрд╛рдБ: foldr (рдлрд╝рдВрдХреНрд╢рди, StartValue, рд╕реВрдЪреА) ( http ) : //www.erlang.org/doc/man/lists.html ) рдФрд░ рдЙрдирдХреЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓реЙрдЧ ( http://www.erlang.org/doc/man/sets.html , http://www.erlang.org /doc/man/ordsets.html , http://www.erlang.org/doc/man/gb_sets.html ) рдФрд░ рд╕рд░рдгрд┐рдпрд╛рдБ ( http://www.erlang.org/doc/man/array.html ) рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реАрдЦрдирд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЪрдХреНрд░ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣рдо рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ)ред

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

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

рдФрд░ рд╣рдо рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдорд╛рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд░рд▓рд╛рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рд╕рднреА рдЙрджрд╛рд╣рд░рдг combinat.erl рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: https://github.com/raven29/combinat_erl.git

рджреЛ рд▓рдХреНрд╖реНрдп - рджреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА


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

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

рдЖрдзрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛрдореНрдмрд┐рдирд╛рдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: permuts_out (рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛) рдФрд░ рд╕рдВрдпреЛрдЬрди: combs_out (рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛) рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдХреНрд░рдорд╢рдГ рдХреНрд░рдорд╛рдВрдХ рдХреЗ рддрддреНрд╡реЛрдВ рд╕реЗ рд╕рднреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╕рдВрдЦреНрдпрд╛ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ permuts_out (рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛) рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛ рдмрд╛рд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрдВрдХреНрддрд┐ 6 тАЛтАЛрдореЗрдВ - рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдкрдВрдХреНрддрд┐ 7 рдореЗрдВ - рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЗрд╕ рдЕрдВрддрд┐рдо рдХреЙрд▓ рдореЗрдВ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ [RemainH | рдкрд░рд┐рдгрд╛рдо] рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рддрддреНрд╡реЛрдВ рдХрд╛ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реВрдЪреА рдореЗрдВ рдЪреМрдерд╛ рддрд░реНрдХ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрд░реЛрдд рд╕реВрдЪреА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реЗрд╖ рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 permuts_out(List, Number) -> permuts_out(List, [], Number, List). permuts_out(_Remain, Result, Number, _List) when length(Result) == Number -> io:format("~w~n", [Result]); permuts_out([], _Result, _Number, _List) -> ok; permuts_out([RemainH|RemainT], Result, Number, List) -> permuts_out(RemainT, Result, Number, List), permuts_out(List -- [RemainH|Result], [RemainH|Result], Number, List). 


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

 combs_out(List, Number) -> combs_out(List, [], Number). combs_out(_Remain, Result, Number) when length(Result) == Number -> io:format("~w~n", [Result]); combs_out([], _Result, _Number) -> ok; combs_out([RemainH|RemainT], Result, Number) -> combs_out(RemainT, Result, Number), combs_out(RemainT, [RemainH|Result], Number). 


рджреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА - рджреЛ рдХрд╛рд░реНрдп


рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рджреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдЙрдирдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ: * _iteration - рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреБрдирд░рд╛рд╡рд░реНрддрди рд╕реНрддрд░ рдкрд░ рд╢реЗрд╖ рд╕реВрдЪреА рд╕реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП, * _recursion - рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реНрддрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

 permuts_out_2(List, Number) -> permuts_out_iteration(List, [], Number, List). permuts_out_iteration([], _Result, _Number, _List) -> ok; permuts_out_iteration([RemainH|RemainT], Result, Number, List) -> permuts_out_iteration(RemainT, Result, Number, List), permuts_out_recursion(List -- [RemainH|Result], [RemainH|Result], Number, List). permuts_out_recursion(_Remain, Result, Number, _List) when length(Result) == Number -> io:format("~w~n", [Result]); permuts_out_recursion(Remain, Result, Number, List) -> permuts_out_iteration(Remain, Result, Number, List). combs_out_2(List, Number) -> combs_out_iteration(List, [], Number, List). combs_out_iteration([], _Result, _Number, _List) -> ok; combs_out_iteration([RemainH|RemainT], Result, Number, List) -> combs_out_iteration(RemainT, Result, Number, List), combs_out_recursion(RemainT, [RemainH|Result], Number, List). combs_out_recursion(_Remain, Result, Number, _List) when length(Result) == Number -> io:format("~w~n", [Result]); combs_out_recursion(Remain, Result, Number, List) -> combs_out_iteration(Remain, Result, Number, List). 

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

рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ!



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

  1. рдКрдкрд░ рдХреА рдУрд░ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдореЗрдВ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ
  2. рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди
  3. рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреНрд░реАрдо рдФрд░ рд╕рдВрдЧреНрд░рд╣рдг рд╕реНрдЯреНрд░реАрдо

рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╡рд╣рд╛рдБ рднрд╛рд▓реВ - рднрд╛рд▓реВ рд╡рд╛рдкрд╕

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

  1. рдорд╛рдирдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрдЬрд╛рдп рдкрд░рд┐рдгрд╛рдо [рдкрд░рд┐рдгрд╛рдо] рд▓реМрдЯрд╛рдПрдВ (рдкрдВрдХреНрддрд┐ 3, 11)
  2. рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рддрд▓ рдкрд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА [] рдареАрдХ рдкрд░рдорд╛рдгреБ рдХреЗ рдмрдЬрд╛рдп (рдкрдВрдХреНрддрд┐ 4: 12)
  3. рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреЙрд▓ рдХреЗ рдмрдЬрд╛рдп "++" рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рдВрдЪрдп (рдкрдВрдХреНрддрд┐ 6, 14)

Permuts_res (рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛) рдФрд░ combs_res (рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛) рдлрд╝рдВрдХреНрд╢рди рдХреНрд░рдорд╢рдГ рд╕реВрдЪреА рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдХреНрд░рдорд╢рдГ, рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рднреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╕рдВрдпреЛрдЬрдиред

 permuts_res(List, Number) -> permuts_res(List, [], Number, List). permuts_res(_Remain, Result, Number, _List) when length(Result) == Number -> [Result]; permuts_res([], _Result, _Number, _List) -> []; permuts_res([RemainH|RemainT], Result, Number, List) -> permuts_res(RemainT, Result, Number, List) ++ permuts_res(List -- [RemainH|Result], [RemainH|Result], Number, List). combs_res(List, Number) -> combs_res(List, [], Number). combs_res(_Remain, Result, Number) when length(Result) == Number -> [Result]; combs_res([], _Result, _Number) -> []; combs_res([RemainH|RemainT], Result, Number) -> combs_res(RemainT, Result, Number) ++ combs_res(RemainT, [RemainH|Result], Number). 

рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗ рд╡реЛ рдХрд░реЛ!


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

 permuts_clb(List, Number, Callback) -> permuts_clb(List, [], Number, List, Callback). permuts_clb(_Remain, Result, Number, _List, Callback) when length(Result) == Number -> Callback(Result); permuts_clb([], _Result, _Number, _List, _Callback) -> ok; permuts_clb([RemainH|RemainT], Result, Number, List, Callback) -> permuts_clb(RemainT, Result, Number, List, Callback), permuts_clb(List -- [RemainH|Result], [RemainH|Result], Number, List, Callback). combs_clb(List, Number, Callback) -> combs_clb(List, [], Number, Callback). combs_clb(_Remain, Result, Number, Callback) when length(Result) == Number -> Callback(Result); combs_clb([], _Result, _Number, _Callback) -> ok; combs_clb([RemainH|RemainT], Result, Number, Callback) -> combs_clb(RemainT, Result, Number, Callback), combs_clb(RemainT, [RemainH|Result], Number, Callback). 

рдХреЙрд▓рдмреИрдХ рдЪрд░ рдореЗрдВ, рдПрдХ рддрд░реНрдХ рд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрд░рд▓реИрдВрдЧ рдПрдХ рдХреЗ рд╕рд╛рде - рдПрд░рд▓рдВрдЧ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рддрддреНрд╡реЛрдВ рдХреЗ рд╕рднреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ [1,2,3] 2:
 combinat:permuts_clb([1,2,3], 2, fun(X)->io:format("~w~n",[X]) end). 

рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдЪрд░реНрдЪрд╛ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХреА рдЧрдИ рд╣реИред

рдмрд┐рдЧ рдмреНрд░рджрд░ рдЖрдкрдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ


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

рдиреАрдЪреЗ рдЗрд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдкрдВрдХреНрддрд┐ 3 "рд╕реАрдврд╝реА рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ" рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, trap_exit рдзреНрд╡рдЬ рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдкреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдмрджреНрдз рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдкрдВрдХреНрддрд┐ 5 рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдзрд╛рдЧрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдмрд╛рдВрдзрддрд╛ рд╣реИ)ред рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ, permuts_clb (рдпрд╛ combs_clb) рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рде рд╣реА рдХреЙрд▓рдмреИрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:
 fun(R)->Supervisor!R end 

рдкрдВрдХреНрддрд┐ 6 тАЛтАЛрдореЗрдВ, рд▓реВрдк ([]) рдлрд╝рдВрдХреНрд╢рди рдХреБрд▓ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЦрд╛рд▓реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдирддрд╛ рд╣реИред рдЬрдм рдЕрдЧрд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд▓реВрдк (рдЯреЛрдЯрд▓ ++ [рд░рд┐рдЬрд▓реНрдЯ]) рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдирдП рдЖрдпреЗ рдкрд░рд┐рдгрд╛рдо рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡рд░реНрддреА (рд▓рд╛рдЗрди 14) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдереНрд░реЗрдб рдХреЗ рдХрд╛рдо рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, "рд╕реАрдврд╝реА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рд╣реЛрддрд╛ рд╣реИ: рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЯреНрдпреВрд▓ (рд▓рд╛рдЗрди 10) рд▓реВрдк рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (), рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдордЧреНрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рд▓рд╛рдЗрди 11) рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ (рдкрдВрдХреНрддрд┐ 12) )ред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ - рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдзрд╛рдЧреЗ рдХреА рдкрд┐рдб, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ - рдирд┐рд╖реНрдкрд╛рджрдирдХрд░реНрддрд╛ рдзрд╛рдЧреЗ рдХреА рдкрд┐рдбред

 %% Function = permuts_clb | combs_clb proc(Function, List, Number) -> process_flag(trap_exit, true), Supervisor = self(), spawn_link(combinat, Function, [List, Number, fun(R)->Supervisor!R end]), loop([]). loop(Total) -> receive {'EXIT', Worker, normal} -> io:format("~w~n", [Total]), unlink(Worker); Result -> loop(Total ++ [Result]) end. 

рдХрд╛рд░реНрдп рдХреЗ рд╣рд▓ рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ permuts_clb рдпрд╛ combs_clb рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2 рд╕реЗ рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди [1,2,3] рдХрд╛ рдореБрджреНрд░рдг рдПрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 combinat:proc(permuts_clb, [1,2,3], 2). 

рдПрдХ рд╢реБрд░реБрдЖрдд рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рд╕реНрдкреЙрди_рд▓рд┐рдВрдХ () рд╕реЗ рдкрд╣рд▓реЗ рд▓реВрдк () рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╢реНрд░реЛрддрд╛ рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдереНрд░реЗрдб рдХрд╛ рдПрдХ рднреА рд╕рдВрджреЗрд╢ рдпрд╛рдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓реВрдк () рдкрд░ рд▓рдЯрдХрд╛рдПрдЧреА, рдФрд░ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдХрднреА рднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░реЗ, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ: рдбрд┐рдЬрд╛рдЗрди
 self()!R 

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

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

рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИ



рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ " рд╕реВрдЪреА рд╕рдордЭ " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд░реВрдк рдореЗрдВ рд╕реВрдЪреА рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдирдИ рд╕реВрдЪреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореВрд▓ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдореВрд▓ рд╕реВрдЪреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдбрд┐рдЬрд╛рдЗрди рдЧрдгрд┐рддреАрдп рд╕реЗрдЯ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдЕрдВрдХрди рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдмреЛрдз рдирд┐рд░реНрдорд╛рдг рдореЗрдВ, 1 рд╕реЗ 9 рддрдХ рдХреЗ рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╣реИ:
 [X*X || X <- [1,2,3,4,5,6,7,8,9]]. 

рд╕реВрдЪреА рдХреА рд╕рдордЭ рдореЗрдВ, рдХрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, 1 рд╕реЗ 9 рддрдХ рдЧреБрдгрди рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 [io:format("~w * ~w = ~w~n", [I, J, I*J]) || I <- [1,2,3,4,5,6,7,8,9], J <- [1,2,3,4,5,6,7,8,9]]. 

рд╕рд╛рде рд╣реА рдЧреБрдгрди рддрд╛рд▓рд┐рдХрд╛, рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░рдХреЛрдВ рдХреЗ рдХреНрд░рдордЪрдп рдХреЗ рд╕рд╛рде рдмрд╛рд░-рдмрд╛рд░ рдкрд░рд┐рдгрд╛рдо рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ:
 [io:format("~w * ~w = ~w~n", [I, J, I*J]) || I <- [1,2,3,4,5,6,7,8,9], J <- [1,2,3,4,5,6,7,8,9], I < J]. 


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

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

рдЕрдкрдиреА рддрд░рд╣ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг


рд╕реВрдЪреА рдХреА рд╕рдордЭ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ, рд╕реВрдЪреА рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛:

 permuts_comp(List, Number) -> permuts_comp(List, [], Number). permuts_comp(_Remain, Result, Number) when length(Result) == Number -> io:format("~w~n", [Result]); permuts_comp(Remain, Result, Number) -> [permuts_comp(Remain -- [R], [R] ++ Result, Number) || R <- Remain]. 

Permuts_comp рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреА рдмреЛрдз рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╣рддрд╛ рд╣реИред
рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдп рд╕рдВрднрд╡ рд╣реИред

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...


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

 combs_comp(List, Number) -> ListIndexed = lists:zip(List, lists:seq(1, length(List))), combs_comp(ListIndexed, [], Number). combs_comp(_Remain, Result, Number) when length(Result) == Number -> {ResultValue, _I} = lists:unzip(Result), io:format("~w~n", [ResultValue]); combs_comp(Remain, [], Number) -> [combs_comp(Remain -- [R], [R], Number) || R <- Remain]; combs_comp(Remain, [{HValue,HIndex}|T], Number) -> [combs_comp(Remain -- [{R,I}], [{R,I}] ++ [{HValue,HIndex}|T], Number) || {R,I} <- Remain, I > HIndex]. 

рдпрд╣ рдХреБрдЫ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдерд╛: рдЬрд╝рд┐рдк (рд╕реВрдЪреА 1, рд╕реВрдЪреА 2), рд╕реВрдЪрд┐рдпрд╛рдБ: рдЕрдирдЬрд╝рд┐рдк (рд▓рд┐рд╕реНрдЯрдЯрд▓), рд╕реВрдЪрд┐рдпрд╛рдБ: seq (StartTalue, рд▓рдВрдмрд╛рдИ)ред рдЗрд╕ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рде рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд░рдгреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реЛрдЧреА ...

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


All Articles