
рдЬрдм рдореИрдВрдиреЗ рдЦреЗрд▓ "
рдереБрдб! " рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд▓рд┐рдЦрд╛ , рддреЛ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░реЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдереАред ZRF рднрд╛рд╖рд╛ рдХреА рд╕рд╛рджрдЧреА рдХрд╛ рдЗрд╕рдХрд╛ рджреВрд╕рд░рд╛ рдкрдХреНрд╖ рд╣реИ - рдЗрд╕ рдкрд░ рдХреБрдЫ рдХрдо рдЬрдЯрд┐рд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрд╢реЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреА рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЕрддрд┐рд░реЗрдХ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдореИрдиреБрдЕрд▓ рдХрд╛рдо рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рднреА рдмрдврд╝рд╛рддрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ ZoG рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдВрджреБ рд╣реИ)ред
рдРрд╕реЗ рдЕрддрд┐рд░реЗрдХ рд╕реЗ рдХреЛрдИ рдХреИрд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддрд╛ рд╣реИ?
рдмреЗрд╢рдХ, рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде! рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ ZRF рдореИрдХреНрд░реЛрдЬрд╝ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдирд╣реАрдВ рд╣реИрдВред рдПрдбреНрд░рд┐рдпрди рдХрд┐рдВрдЧ,
рд╕рд╛рдЗрдХреНрд░реЛрдХреЛ рдФрд░
рдЯрд╛рдЗрдлреВрди рдЦреЗрд▓реЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдФрд░ рдПрдХ рдмрд╛рд╣рд░реА
рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдиреА рдЦреБрдж рдХреА, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдореИрдХреНрд░реЛ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреАред рдЖрдЬ, рдореИрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЬреЗрдбрдЖрд░рдПрдл рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереБрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛, рд╣рдо рдПрдХ рдмрд╛рд╣рд░реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди .prezrf) рдХреЛ рдирд┐рдпрдорд┐рдд zrf рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реНрд╡рдпрдВ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдкреНрд░реАрдЬрд╝реНрд░рдлрд╝ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ (рдмрд╢рд░реНрддреЗ рдХрд┐ рдЬрд╛рд╡рд╛ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ)
java -jar prezrf.jar MyFile.prezrf
рдпрджрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдореА zrf рдлрд╝рд╛рдЗрд▓ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
рдирдИ рднрд╛рд╖рд╛ рд╣рдореЗрдВ рдХрд┐рди рдЕрд╡рд╕рд░реЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреА рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред Prezrf рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
! (рдЕрдВрдд рдореЗрдВ рд╕рднреА рдирдП рдХреАрд╡рд░реНрдб рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ)ред рдореВрд▓ ZRF
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдП рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
! ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирдП рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЕрдиреНрдп рдореИрдХреНрд░реЛрдЬрд╝ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (ZRF рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ)ред
рдХреАрд╡рд░реНрдб рдХрд╛
рд╡рд┐рд╕реНрддрд╛рд░! рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рд╕реНрдерд╛рди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореИрдХреНрд░реЛ рдХреЗ "рдкрд░рд┐рдирд┐рдпреЛрдЬрди" рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдмрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
! 'ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдХреЗ:
(define! swap ($2 $1) ) (! swap ab)
... рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ:
(ba)
рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рдХрдорд╛рдВрдб (рд╕реНрд╡реИрдк рдЕрдм) рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди
рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
! рд╣рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЯрд╛рдЗрдкреЛ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣рдо рд╕реНрд╡реИрдк рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдП, рддреЛ рдирд┐рд░реНрдорд╛рдг (рд╕реНрд╡реИрдк рдПрдмреА) рдХреЛ рдмрд╕ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░
рд╡рд┐рд╕реНрддрд╛рд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдореИрдХреНрд░реЛ рдХреЙрд▓
! , рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдЧрдарди рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛:
рд╡рд┐рд╕реНрддрд╛рд░!: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореИрдХреНрд░реЛ "рд╕реНрд╡реИрдк" ред
рдпрд╣ рд╕рдм, рд╢рд╛рдпрдж, рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░реАрдЬрд╝рд░реЙрдлрд╝ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдХреНрд░реЛ рдореЗрдВ, рд╣рдо рд╕реВрдЪреА рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдХреНрд░реЛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдХрдИ рддрд░реНрдХреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИред
$ 2 * 4 рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ 2, 3, рдФрд░ 4 рд╡реЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдореИрдХреНрд░реЛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ (рдмрд╢рд░реНрддреЗ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЪрд╛рд░ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реЛрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдирд┐рд░реНрдорд╛рдг
$ n * рдФрд░
$ * m рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╢рдмреНрджрд╛рд░реНрде рд╣реИрдВред рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдХреНрд░реЛ рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(define! count (length! ($1*)) ) (! count abc) ; => 3
рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐
$ 1 * рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдмреНрд░реИрдХреЗрдЯ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИрдВ - рд╣рдо рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдореИрдХреНрд░реЛ рдХреЗ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдХреЛрд╖реНрдардХ рдЧреБрдо рд╣реЛрдиреЗ рд╕реЗ
рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд╛рдж рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддреНрд░реБрдЯрд┐ рд╣реЛ рдЬрд╛рдПрдЧреА
! рдХреЗрд╡рд▓ рдПрдХ рд╕реВрдЪреА рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реА рдореИрдХреНрд░реЛ рдЗрдирдкреБрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдПрдХ рдХреЙрд▓
(рдЧрд┐рдирддреА) рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(define! count ($?1 (length! ($1*)) ) ($!1 0) )
рдпрд╣рд╛рдВ
$ 1 рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рдореИрдХреНрд░реЛ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░
$ 1 рдЕрдиреНрдпрдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
$ -n рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпреЗ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреАред
рдХрд┐рд╕реА рднреА рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рддрд░рд╣, prezrf рд╣рдореЗрдВ рд╕рд╢рд░реНрдд рдирд┐рд╖реНрдкрд╛рджрди (
рдпрджрд┐-рдХрдо!, рдЕрдЧрд░-рдХрдо-рдпрд╛-рдмрд░рд╛рдмрд░-рдмрд░рд╛рдмрд░! ) рдФрд░ рд▓реВрдк (рдХреЗ
рд▓рд┐рдП ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░-рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди (рдФрд░ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд╣реИрдВ), рд╕рдорд╛рди ZRF рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд┐рдкрд░реАрдд,
рдЕрдиреНрдп рд╢рд╛рдЦрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди
! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдмрд╣реБрдд рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ):
(define! -all-directions (n ne e se s sw w nw)) (define! shift-all (for! $d ($ -all-directions) (shift $d) ) ) (! shift-all)
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрдорд╛рдг '
$ ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реИ:
(!! (! macro))
рд╡рд┐рд╕реНрддрд╛рд░! рдпрд╣рд╛рдБ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ '
!! '? рдпрд╣ рдХрдорд╛рдВрдб (
рд╡рд┐рд╕реНрддрд╛рд░-рдкрд╣рд▓реЗ! ) рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рди рдХрд┐ рд╕реНрд╡рдпрдВ рдкреИрд░реЗрдВрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдореЗрдВ рддрддреНрд╡ рдХреЗ
рд▓рд┐рдП (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ)ред рдпрд╣ рдмрд┐рдВрджреБ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
(-рд╕рднреА рджрд┐рд╢рд╛рдПрдБ) :
(shift !) (shift -all-directions)
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреЗ
рд▓рд┐рдП! рдпрд╣ рдХреЗрд╡рд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдкрдорд╛рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
рдЗрд╕рд▓рд┐рдП рдЯреНрд░реЛрд▓ рд╣реЛ рдЬрд╛рдУ ( define troll-1 ( $1 (verify empty?) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) ) ( define troll-2 ( mark (opposite $1) (verify friend?) back $1 (verify empty?) $1 (verify empty?) (verify (or (enemy? n) (enemy? nw) (enemy? s) (enemy? ne) (enemy? w) (enemy? sw) (enemy? e) (enemy? se))) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) ) ( define troll-3 ( mark (opposite $1) (verify friend?) (opposite $1) (verify friend?) back $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (verify (or (enemy? n) (enemy? nw) (enemy? s) (enemy? ne) (enemy? w) (enemy? sw) (enemy? e) (enemy? se))) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) ) ( define troll-4 ( mark (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) back $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (verify (or (enemy? n) (enemy? nw) (enemy? s) (enemy? ne) (enemy? w) (enemy? sw) (enemy? e) (enemy? se))) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) ) ( define troll-5 ( mark (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) back $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (verify (or (enemy? n) (enemy? nw) (enemy? s) (enemy? ne) (enemy? w) (enemy? sw) (enemy? e) (enemy? se))) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) ) ( define troll-6 ( mark (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) back $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (verify (or (enemy? n) (enemy? nw) (enemy? s) (enemy? ne) (enemy? w) (enemy? sw) (enemy? e) (enemy? se))) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) ) ( define troll-7 ( mark (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) (opposite $1) (verify friend?) back $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (verify (or (enemy? n) (enemy? nw) (enemy? s) (enemy? ne) (enemy? w) (enemy? sw) (enemy? e) (enemy? se))) (if (enemy? n) (capture n)) (if (enemy? nw) (capture nw)) (if (enemy? s) (capture s)) (if (enemy? ne) (capture ne)) (if (enemy? w) (capture w)) (if (enemy? sw) (capture sw)) (if (enemy? e) (capture e)) (if (enemy? se) (capture se)) add ) )
рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рд▓реВрдк рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЖрдПрдЧреА:
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ (define! repeat (if-less! 0 $1 $2* (! repeat (!! (sum! $1 -1)) $2*) ) ) (define! troll-n (if-less! 0 $1 (for! $d ($ -all-directions) ( (if-less! 1 $1 mark (repeat $1 (opposite $d) (verify friend?) ) back ) (repeat $1 $d (verify empty?) ) (if-less! 1 $1 (verify (or (for! $dd ($ -all-directions) (enemy? $dd) ) ) ) ) (for! $dd ($ -all-directions) (if (enemy? $dd) (capture $dd) ) ) add ) ) (! troll-n (!! (sum! $1 -1))) ) ) ... (! troll-n 7)
рдпрд╣ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдордЭрдирд╛ рдХреБрдЫ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ
рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдореИрдХреНрд░реЛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
(! repeat 3 abc)
рдереБрдб рдХреЗ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ! рдПрдХ рдФрд░ рдЬрдЧрд╣ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
( define check-rock ( check-rock-direction n ne e se s sw w nw) ( check-rock-direction ne e se s sw w nw n) ( check-rock-direction e se s sw w nw n ne) ( check-rock-direction se s sw w nw n ne e) ( check-rock-direction s sw w nw n ne e se) ( check-rock-direction sw w nw n ne e se s) ( check-rock-direction w nw n ne e se s sw) ( check-rock-direction nw n ne e se s sw w) )
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрда рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рднреА рдЪрдХреНрд░реАрдп рдХреНрд░рдорд╛рдВрдХрди рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ, рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд╕реВрдЪреА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ "рдХрдЯ рдЖрдЙрдЯ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
(define! range (if-less-or-equal! $1 $2 (nth! $1 $3) (! range (!! (sum! $1 1)) $2*) ) ) (! range 3 4 (abcde)) ; => cd
рдлрд╝рдВрдХреНрд╢рди
(nth! N рд╕реВрдЪреА) , рдпрд╣рд╛рдВ, рдЖрдкрдХреЛ рд╕реВрдЪреА рдХрд╛ nth рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдЗрдП рд╕реВрдЪреА рдХреЛ "рдШреБрдорд╛рдиреЗ" рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
(define! rotate (if-less! 0 $1 $2 (! rotate (!! (sum! $1 -1)) ((splice! ((! range 2 8 $2)) ((nth! 1 $2))))) ) ) (! rotate 2 (abcdefgh))
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
((рд░реЛрдЯреЗрдЯ 3 (abcdefgh))) рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ [рд╕реВрдЪреА "(nth! 2 ((рдмреНрдпрд╛рд╣! (!! рд╢реНрд░реЗрдгреА 2 8 (abc) ...) рдореЗрдВ рддрд░реНрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ [рд╕реВрдЪреА" (nth! $ 1 $ 3) "t.prezrf, рдкрдВрдХреНрддрд┐ 3] рдореЗрдВ" рд╕реВрдЪреА "(рд╢реНрд░реЗрдгреА) рдХреЗ рд▓рд┐рдП 2 8 (рдмреНрдпрд╛рд╣! (! (! рд╢реНрд░реЗрдгреА 2 8 (ab "... рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ!) [рд╕реВрдЪреА"! (! рд╕реАрдорд╛ 2 8 ((рдмреНрдпрд╛рд╣!)! (рд╢реНрд░реЗрдгреА 2 8 (a) ... рддрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ рддрд░реНрдХ "рд╕реВрдЪреА рдореЗрдВ" рд░реЗрдВрдЬ 2 8 $ 2) "t.prezrf, рд▓рд╛рдЗрди 11] рдХреЗ рд▓рд┐рдП [рд╕реВрдЪреА" (рд░реЛрдЯреЗрдЯ 2 ((рдмреНрдпрд╛рд╣! - (рд░реЗрдВрдЬ 2 8) (ab) ... рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ!] [рд╕реВрдЪреА "!)! (рд░реЛрдЯреЗрдЯ 2 (рдмреНрдпрд╛рд╣) рдХреЗ рд▓рд┐рдП ! ((рд╢реНрд░реЗрдгреА 2 8 (рдПрдХ ... [рд╕реВрдЪреА рдореЗрдВ "рддрд░реНрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ ... (рдмрд╛рд░реА рдмрд╛рд░реА рд╕реЗ! (рдпреЛрдЧ! $ 1 -1)) ((рдмреНрдпрд╛рд╣! (" ... t.prezrf, рд▓рд╛рдЗрди 11 рдкрд░] рдХреЗ рд▓рд┐рдП [! рд╕реВрдЪреА "(3 рдШреБрдорд╛рдПрдБ (abcdefgh))" рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ! [рдХреА рд╕реВрдЪреА "((рд░реЛрдЯреЗрдЯ 3 (abcdefgh))" рдкрд░ t.prezrf, рд▓рд╛рдЗрди 15]]]]]]]:
рдЗрд╕ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП t.prezrf, рд▓рд╛рдЗрди 3 рдкрд░ "рд╕реВрдЪреА" (nth! 2 ((!!!! рд╕реАрдорд╛ 2 8 (abc) ...) рдореЗрдВ рддрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ (nth! $ 1 $ 3) "t.prezrf, рд▓рд╛рдЗрди 3 рдкрд░" 2 8 (рдмреНрдпрд╛рд╣! (! (! рд╢реНрд░реЗрдгреА 2 8 (ab "... рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ!) [рд╕реВрдЪреА"! (! рд╕реАрдорд╛ 2 8 ((рдмреНрдпрд╛рд╣!)! (рд╢реНрд░реЗрдгреА 2 8 (a) ... рддрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ рддрд░реНрдХ "рд╕реВрдЪреА рдореЗрдВ" рд░реЗрдВрдЬ 2 8 $ 2) "t.prezrf, рд▓рд╛рдЗрди 11] рдХреЗ рд▓рд┐рдП [рд╕реВрдЪреА" (рд░реЛрдЯреЗрдЯ 2 ((рдмреНрдпрд╛рд╣! - (рд░реЗрдВрдЬ 2 8) (ab) ... рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ!] [рд╕реВрдЪреА "!)! (рд░реЛрдЯреЗрдЯ 2 (рдмреНрдпрд╛рд╣) рдХреЗ рд▓рд┐рдП ! ((рд╢реНрд░реЗрдгреА 2 8 (рдПрдХ ... [рд╕реВрдЪреА рдореЗрдВ "рддрд░реНрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ ... (рдмрд╛рд░реА рдмрд╛рд░реА рд╕реЗ! (рдпреЛрдЧ! $ 1 -1)) ((рдмреНрдпрд╛рд╣! (" ... t.prezrf, рд▓рд╛рдЗрди 11 рдкрд░] рдХреЗ рд▓рд┐рдП [! рд╕реВрдЪреА "(3 рдШреБрдорд╛рдПрдБ (abcdefgh))" рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ! [рдХреА рд╕реВрдЪреА "((рд░реЛрдЯреЗрдЯ 3 (abcdefgh))" рдкрд░ t.prezrf, рд▓рд╛рдЗрди 15]]]]]]]:
1 рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреЗ рдЖрдЗрдЯрдо # 2 рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ C ++ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдХрд╛рдлреА рд╕рдордп рддрдХ рдкреНрд░реАрдЬрд╝реНрд░рдл рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджрд░реНрдж рд░рд╣рд┐рдд рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдЕрдВрдЧреВрдареЗ рдХреЗ рджреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛:
- рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рди рдХрд░реЗрдВ
- рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ ! рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ
рдЗрди рдирд┐рдпрдореЛрдВ рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдЪрд▓рди, рдХрдИ рдмрд╛рд░, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдЙрдбрд╝рд╛рдиреЗ рдХреА рдзрдордХреА рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╣реБрдЖ рдЙрд╕рдХрд╛ рд╕рд╛рд░ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдкрд╣рд▓реЗ рдирд┐рдпрдо рдХреА рднрд╛рд╡рдирд╛ рд╕реЗ рд╣рдорд╛рд░реЗ
рдШреВрдордиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
(define! rotate (if-less! 0 $1 ((splice! ((! range (!! (sum! $1 1)) (!! (length! $2)) $2)) ((! range 1 $1 $2)) )) (! rotate (!! (sum! $1 -1)) $2) ) (if-equal! 0 $1 $2 ) )
рд╡рд╣ рдбрд░рд╛рд╡рдирд╛ рджрд┐рдЦрдиреЗ рд▓рдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЕрдм рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рд╣рдореЗрдВ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрди рддрд░реНрдХреЛрдВ рдХреЛ
рдЪреЗрдХ-рд░реЙрдХ-рджрд┐рд╢рд╛ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдореИрдХреНрд░реЛ рдХреЛ рдЗрд╕рд╕реЗ рдХреЙрд▓
рдХрд░рдХреЗ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣
рдШреБрдорд╛рдПрдЧрд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЧреБрдкреНрдд рд╣рдерд┐рдпрд╛рд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ -
рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдп :
(define! map ($!3 (! map $1 $2 (!! (length! $2))) ) ($?3 (if-less! 0 $3 ($1 (!! (nth! $3 $2))) (! map $1 $2 (!! (sum! $3 -1))) ) ) ) (define check-rock (! map check-rock-direction (!! ((! rotate (!! (sum! (!! (length! ($ -all-directions))))) ($ -all-directions) ))) ) )
рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдерд╛ред рдЗрд╕ рд╕рднреА рдХреЛрдб рдореЗрдВ рдореБрдЦреНрдп рд╕реНрдерд╛рди рдпрд╣рд╛рдБ рд╣реИ:
($ 1 ...) ред рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо
рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдореА ZRF рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдерд╛ред 14-рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реНрд░реЛрдд рд╕реЗ рд╕рднреА рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ! рдХрд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, ZoG рдЗрд╕ ZRF-ku рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреИрд╕реЗ рдЙрдмрд░реЗрдВ? рд╣рд╛рдБ, рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рдорджрдж рд╕реЗ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ):
рдореИрдХреНрд░реЛрдЬрд╝ рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ (define! troll-n (if-less! 0 $1 (define (concat! troll - $1) ( (if-less! 1 $1 mark (repeat (!! (sum! $1 -1)) (opposite (concat! $ 1)) (verify friend?) ) back ) (repeat $1 (concat! $ 1) (verify empty?) ) (if-less! 1 $1 (verify (or (for! $dd ($ -all-directions) (enemy? $dd) ) ) ) ) (for! $dd ($ -all-directions) (if (enemy? $dd) (capture $dd) ) ) add ) ) (! troll-n (!! (sum! $1 -1))) ) ) (! troll-n 7) (define! troll-all (if-less! 0 $1 (for! $d ($ -all-directions) ( (concat! troll - $1) $d ) ) (! troll-all (!! (sum! $1 -1))) ) )
рдирд┐рд░реНрдорд╛рдг
((рдЯреНрд░реЛрд▓-рдПрди 7) рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ ZRF рдореИрдХреНрд░реЛрдЬрд╝ рдЯреНрд░реЛрд▓ -1, рдЯреНрд░реЛрд▓ -2, ... рдЯреНрд░реЛрд▓ -7 (рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдХреНрд░рдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ) рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
(! рдЯреНрд░реЛрд▓-рдСрд▓) , рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
! рдЙрдирдХреА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛ред рдпрд╣ рдбрд┐рдЬрд╛рдЗрди
(рдХреЙрдирдЯреИрдЯ! $ 1) рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдЯрд┐рд▓ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдо ZRF рдореИрдХреНрд░реЛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ
$ 1 рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕рд┐рд░реНрдл
$ 1 рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреАрдорд╛ рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдореА ZRF рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 28 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рдЗрд╕реЗ рдФрд░ рднреА рдЫреЛрдЯрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордЭ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдореВрд▓ рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд▓рдВрдмреА рдпрд╛рддреНрд░рд╛ рдкрд░ рд╣рдордиреЗ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рдХреАред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд
рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рд╕реНрдерд╛рдкрд┐рдд рдЬрд╛рд╡рд╛ рдХрд╛ рд╣рд░ рдЦреБрд╢ рдорд╛рд▓рд┐рдХ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЙрд╕рдХреЗ рдордЬрджреВрд░реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо ZoG рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рдпрд╣рд╛рдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?