рдкреАрдЯрд░ рдиреЙрд░рд╡рд┐рдЧ рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж (рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ (рд▓рд┐рд╕реНрдк) рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░) рдкрд╛рдпрдерди рдореЗрдВ)ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдкреАрдЯрд░ рдХрд╛рдлреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рджреБрднрд╛рд╖рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдпреЛрдЬрдирд╛ рднрд╛рд╖рд╛ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рдЫреЛрдЯреЗ (рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдореЗрдВ 90 рд▓рд╛рдЗрдиреЗрдВ) рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЦрдХ рдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреАрдЯрд░ рдиреЙрд░рд╡рд┐рдЧ рдПрдХ рдЕрдореЗрд░рд┐рдХреА рдХрдВрдкреНрдпреВрдЯрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╣реИрдВред рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Google рдореЗрдВ рд╢реЛрдз рдирд┐рджреЗрд╢рдХ (рдкреВрд░реНрд╡ рдореЗрдВ рдЦреЛрдЬ рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рджреЗрд╢рдХ) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдкрд╣рд▓реЗ рдирд╛рд╕рд╛ рдХреЗ рдПрдореНрд╕ рд░рд┐рд╕рд░реНрдЪ рд╕реЗрдВрдЯрд░ рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдбрд┐рд╡реАрдЬрди рдХреЗ рдкреНрд░рдореБрдЦ рдереЗ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдирд╛рдЯреЙрдореА рдФрд░ рд░реЛрдмреЛрдЯрд┐рдХреНрд╕, рдХрдВрдкреНрдпреВрдЯрд░ рдПрдбреЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдПрдВрдб рдбреЗрдЯрд╛ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕, рдиреНрдпреВрд░реЛрдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ, рдХрд▓реЗрдХреНрдЯрд┐рд╡ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдФрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рдЖрдзрд╛рд░рд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджреЛ рд╕реМ рдирд╛рд╕рд╛ рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджреЛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИрдВ: рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде
рдпреЛрдЬрдирд╛ рднрд╛рд╖рд╛ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд▓рд┐рд╕реНрдк рдмреЛрд▓реАред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рджреБрднрд╛рд╖рд┐рдП рдХрд╛ рдирд╛рдо
рд▓рд┐рд╕реНрдлреА (
рд▓рд┐рд╕реЛрдЪреЛ ) рд░рдЦрд╛ред рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ
рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдпреЛрдЬрдирд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦрдирд╛
рд╣реИ , рд╕рд╛рде рд╣реА рд╕рд╛рде
рдХреЙрдорди рд▓рд┐рд╕реНрдк рдореЗрдВ рднреА ред рдЗрд╕ рдмрд╛рд░, рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЙрддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕реБрд▓рдн рд░реВрдк рд╕реЗ, рдореИрдХреНрд╕рд╡реЗрд▓ рдиреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░
рдХреЗ рдореИрдХреНрд╕рд╡реЗрд▓ рдХреЗ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рдХреНрдпрд╛
рдХрд╣рд╛ ред
рд▓рд┐рд╕реНрдлреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде
рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдХрдиреНрд╡реЗрдВрд╢рди (рдХреАрд╡рд░реНрдб, рдЗрдиреНрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░, рдХреЛрд╖реНрдардХ, рдСрдкрд░реЗрдЯрд░ рдкреВрд░реНрд╡рддрд╛, рдбреЙрдЯ рд╕рдВрдХреЗрддрди, рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдЖрджрд┐) рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рд┐рд╕реНрдк рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рднреА рд╕реНрдХреАрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЙрдкрд╕рд░реНрдЧ рд╕рдВрдХреЗрддрдиред рдпрд╣ рд░реВрдк рдЕрдкрд░рд┐рдЪрд┐рдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕рд░рд▓рддрд╛ рдФрд░ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВред рдХреБрдЫ рдордЬрд╛рдХ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ "рд▓рд┐рд╕реНрдк" рдХрд╛ рдЕрд░реНрде рд╣реИ
"рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд┐рдбрд╝рдЪрд┐рдбрд╝реА рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЪрд┐рдбрд╝рдЪрд┐рдбрд╝рд╛рд╣рдЯ," рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐
" рд▓рд┐рд╕реНрдк рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╢реБрджреНрдз рд╣реИред" рджреЗрдЦреЗрдВ:
рдЬрд╛рд╡рд╛ | | рдпреЛрдЬрдирд╛ |
---|
if ( x.val() > 0 ) {<br> z = f(a * x.val() + b); <br>}
| | (if (> (val x) 0)<br> (set! z (f (+ (* a (val x)) b))))
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ "
set!
" рдирд╛рдо рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХреЗрд╡рд▓ рдХреЛрд╖реНрдардХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рд╣реИрдВред рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдЬреИрд╕реЗ
(set! xy)
рдХреЛ рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ; рднрд╛рд╖рд╛ рдХреА рд╕реБрдВрджрд░рддрд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ 6 рд╡рд┐рд╢реЗрд╖ рд░реВрдкреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА 3 рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдирд┐рд░реНрдорд╛рдг - рдЪрд░, рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛:
рдЖрдХрд╛рд░ | рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ | рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рдЙрджрд╛рд╣рд░рдг |
---|
рдЪрд░ рд╕рдВрджрд░реНрдн
| рд╡рд░
| рдкреНрд░рддреАрдХ рдХреЛ рдЪрд░ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ; рдЗрд╕рдХрд╛ рдорд╛рди рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг: x
|
рдирд┐рд░рдВрддрд░ рд╢рд╛рдмреНрджрд┐рдХ
| рд╕рдВрдЦреНрдпрд╛
| рдПрдХ рдирдВрдмрд░ рдХрд╛ рдорддрд▓рдм рдЦреБрдж рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: 12 рдпрд╛ -3.45e+6
|
рдЙрджреНрдзрд░рдг
| (quote рд╡рд┐рд╕реНрддрд╛рд░ )
| рд░рд┐рдЯрд░реНрди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдП рдмрд┐рдирд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: (quote (abc)) тЗТ (abc)
|
рд╕рд╢рд░реНрдд
| (if рдЯреЗрд╕реНрдЯ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдСрд▓ )
| рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ; рдЕрдЧрд░ рд╕рд╣реА рд╣реИ, рддреЛ рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рд╡рд╛рдкрд╕реА рдХрд░реЗрдВ ; рдЕрдиреНрдпрдерд╛ рдЧрдгрдирд╛ рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд▓реМрдЯреЗрдВред рдЙрджрд╛рд╣рд░рдг: (if (< 10 20) (+ 1 1) (+ 3 3)) тЗТ 2
|
рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ
| (set! var рдНрдХреНрд╕реНрдк ) | рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ( define рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдЙрджрд╛рд╣рд░рдг: (set! x2 (* xx))
|
рдкрд░рд┐рднрд╛рд╖рд╛
| (define var рдНрдХреНрд╕реНрдк (define )
| рдиреЗрд╕реНрдЯреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реА рдПрдХ рдирдП рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХреНрд╕рдкреА рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛ рдореВрд▓реНрдп рджреЗрдВред рдЙрджрд╛рд╣рд░рдг: (define r 3) рдпрд╛ (define square (lambda (x) (* xx))) ред
|
рд╕рдорд╛рд░реЛрд╣
| (lambda ( var ... ) exp )
| рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ (рдУрдВ) рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ ... рдФрд░ рд╢рд░реАрд░ рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред рдЙрджрд╛рд╣рд░рдг: (lambda ( r ) (* 3.141592653 (* rr)))
|
рдЕрдиреБрдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рдг | (begin рдНрдХреНрд╕реНрдк ... )
| рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЕрдВрддрд┐рдо рдорд╛рди рд▓реМрдЯрд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг: (begin (set! x 1) (set! x (+ x 1)) (* x 2)) тЗТ 4
|
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓
| ( рдНрдХреНрд╕реНрдк ... )
| рдпрджрд┐ рдЦрд░реАрдж рдирд╣реАрдВ if, set!, define, lambda, begin, рдпрд╛ quote рддрдм рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреА рдЧрдгрдирд╛ рдЙрдиреНрд╣реАрдВ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рд╕рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрд░реНрдХ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: (square 12) тЗТ 144
|
рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ,
var рдХреЛ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╡рд░реНрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ
x
рдпрд╛
square
;
рд╕рдВрдЦреНрдпрд╛ - рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдЗрдЯреИрд▓рд┐рдХ рдореЗрдВ рдмрд╛рдХреА рд╢рдмреНрдж рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрджрдирд╛рдо
рдНрдХреНрд╕реНрдк ... рдХрд╛ рдЕрд░реНрде рд╣реИ рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ
рдПрдХреНрд╕рдк рд░рд┐рдкрд┐рдЯрд┐рд╢рдиред
рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╣рд╛рди рдкреБрд╕реНрддрдХреЛрдВ (
рдлреНрд░реАрдбрдореИрди рдФрд░ рдлреЗрд▓рд┐рд╕рд┐рди ,
рдбрд╛рдпрдмрд╡рд┐рдЧ ,
рдХреНрд╡рд┐рдиреЗрдХ ,
рд╣рд╛рд░реНрд╡реЗ рдФрд░ рд░рд╛рдЗрдЯ рдпрд╛
рд╕рд╕рдорд╛рди рдФрд░ рдПрдмреЗрд▓реНрд╕рди ), рд╡реАрдбрд┐рдпреЛ (
рдПрдмреЗрд▓реНрд╕рди рдФрд░ рд╕рд╕рдорд╛рди ), рдкрд░рд┐рдЪрдп (
рджреЛрд░рд╛рдИ ,
рдкреАрдПрд▓рдЯреА , рдпрд╛
рдиреЗрд▓рд░ ), рдпрд╛ рдПрдХ
рд╕рдВрджрд░реНрдн рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВ ред
рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ
рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
- рдкрд╛рд░реНрд╕рд┐рдВрдЧ: рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдШрдЯрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдирдкреБрдЯ рдХреЛ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рднрд╛рд╖рд╛ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ, рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдПрдХ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдирд╛рдордХ рднрд╛рд╖рд╛ рдЕрдиреБрд╡рд╛рджрдХ рдореЗрдВ, рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕реЗ рд╕реАрдзреЗ рдХрдВрдкреНрдпреВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреАрд╡ рдпреЗрдЬреЗ рдиреЗ рдХрд╣рд╛ , "рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ ред " рдПрдЧреНрдЬ рдиреЗ 8 рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рдХ (рдпрд╛, рд╕рдордХрдХреНрд╖, рджреБрднрд╛рд╖рд┐рдпреЛрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓рд┐рд╕реНрдлреА рдкрд╛рд░реНрд╕рд░ рдХреЛ
parse
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдирд┐рд╖реНрдкрд╛рджрди: рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдирд┐рд╖реНрдХрд╛рд╕рди рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ)ред
рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд▓рдШреБ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ
parse
рдФрд░
eval
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ:

>> рдХрд╛рд░реНрдпрдХреНрд░рдо = "(рд╢реБрд░реВ рдЖрд░ 3 рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ) (* 3.141592653 (* рдЖрд░ рдЖрд░))"
>>> рддреЛрддрд╛ ( рдХрд╛рд░реНрдпрдХреНрд░рдо )
[ ' рд╢реБрд░реВ ', [ ' рдкрд░рд┐рднрд╛рд╖рд┐рдд ', 'рдЖрд░', 3 ] , [ ' * ', 3.141592653 , [ ' * ', 'рдЖрд░', 'рдЖрд░' ] ]
>>> eval ( рдкрд╛рд░реНрд╕ ( рдХрд╛рд░реНрдпрдХреНрд░рдо ) )
реирео.реирен,рекрей,рейрей,реоренрен
рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕реВрдЪрд┐рдпрд╛рдБ, рд╕рдВрдЦреНрдпрд╛рдПрдБ рдФрд░ рдпреЛрдЬрдирд╛ рд╡рд░реНрдг рдХреНрд░рдорд╢рдГ рдкрд╛рдпрдерди рд╕реВрдЪрд┐рдпреЛрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ рддрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдкрд╛рджрди: eval
рдКрдкрд░ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдиреМ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ, рджреЛ рдпрд╛ рддреАрди рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред
eval
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП:
def eval ( x, env = global_env ) :
"рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред"
рдЕрдЧрд░ isa ( x, Symbol ) : # рдЪрд░ рд╕рдВрджрд░реНрдн
рд╡рд╛рдкрд╕реА ред рдЦреЛрдЬреЗрдВ ( x ) [ x ]
elif isa ( x, list ) рдирд╣реАрдВ : # рдирд┐рд░рдВрддрд░ рд╢рд╛рдмреНрджрд┐рдХ
рд╡рд╛рдкрд╕реА x
elif x [ 0 ] == 'рдЙрджреНрдзрд░рдг' : # (рдЙрджреНрдзрд░рдг рдНрдХреНрд╕реНрдк)
( _, рдПрдХреНрд╕рдк ) = x
рд╡рд╛рдкрд╕реА рдНрдХреНрд╕реНрдк
рдПрд▓рд┐рдлрд╝ x [ 0 ] == 'рдЕрдЧрд░' : # (рдпрджрд┐ рдЯреЗрд╕реНрдЯ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдСрд▓)
( _, рдкрд░реАрдХреНрд╖рдг , рд╢реНрд▓реЛрдХ, alt ) = рдПрдХреНрд╕
рд╡рд╛рдкрд╕реА eval ( ( conseq if eval ( test , env ) alt ) , env )
elif x [ 0 ] == 'рд╕реЗрдЯ!' : # (рд╕реЗрдЯ! var рдНрдХреНрд╕реНрдк)
( _, var, exp ) = x
envред рдвреВрдБрдвреЗрдВ ( var ) [ var ] = eval ( рдНрдХреНрд╕реНрдк, env )
elif x [ 0 ] == 'рдкрд░рд┐рднрд╛рд╖рд┐рдд' : # (var var exp exp) рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
( _, var, exp ) = x
env [ var ] = eval ( рдНрдк, env )
рдПрд▓рд┐рдлрд╝ x [ 0 ] == 'рд▓реИрдореНрдмреНрдбрд╛' : # (рд▓реИрдореНрдмреНрдбрд╛ (var *) рдНрдХреНрд╕реНрдк)
( _, vars , exp ) = x
рд╡рд╛рдкрд╕реА lambda * рдЖрд░реНрдЧреНрд╕: eval ( рдНрдХреНрд╕реНрдк, Env ( vars , args, env ) )
рдПрд▓рд┐рдлрд╝ x [ 0 ] == 'рд╢реБрд░реВ' : # (рдПрдХреНрд╕рдкреНрд░рд╛рдЗрдЬрд╝ * рд╢реБрд░реВ рдХрд░реЗрдВ)
рдПрдХреНрд╕ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП [ 1 : ] :
рд╡реИрд▓ = рдИрд╡реИрд▓ ( рдНрдХреНрд╕реНрдк, env )
рд╡рд╛рдкрд╕реА рдШрд╛рдЯреА
рдФрд░ : # (рдНрдХреНрд╕реНрдк exp *)
рдПрдХреНрд╕рдкреА = рдПрдХреНрд╕ рдореЗрдВ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП [ eval ( exp, env ) ]
proc = expsред рдкреЙрдк ( 0 )
рд╡рд╛рдкрд╕реА рдЦрд░реАрдж ( * рд╡рд┐рд╕реНрддрд╛рд░ )
isa = toinstance
рдкреНрд░рддреАрдХ = рдЕрдХрдбрд╝
рдЖрдк рд╕рднреА рдХреЛ рдпрд╣ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝рдХрд░
! рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг рдорд╛рддреНрд░ рд╣реИред
define
рдпрд╛ (
lambda
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП рдЪрд░рд┐рддреНрд░ / рдореВрд▓реНрдп рд╕рдВрдмрдВрдз рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ (рд╕рдВрдХреЗрдд
lis.py>
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд▓рд┐рд╕реНрдк рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкрд╛рдпрдерди рдирд╣реАрдВ):
lis.py > ( рдбрд┐рдлрд╛рдЗрди рдПрд░рд┐рдпрд╛ ( рд▓рдВрдмреЛрджрд░ ( r )) ( * 3.141592653 ( * r r ) ) )
lis.py > ( рдХреНрд╖реЗрддреНрд░ 3 )
реирео.реирен,рекрей,рейрей,реоренрен
рдЬрдм рд╣рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
(lambda ( r ) (* 3.141592653 (* rr)))
, рддреЛ рд╣рдо
elif x[0] == 'lambda'
рдореЗрдВ
elif x[0] == 'lambda'
рд╢рд╛рдЦрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
(_, vars, exp)
рд╕реВрдЪреА
x
(_, vars, exp)
рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ
(_, vars, exp)
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрджрд┐ рд▓рдВрдмрд╛рдИ
x
3 рдирд╣реАрдВ
x
рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВ)ред рд╣рдо рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ
['*', 3.141592653 ['*', 'r', 'r']]
рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЧрдард┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░
r
) рдХреЗ рд╕рд╛рде рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рддрд░реНрдХ, рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд░
*
)ред рдЗрд╕ рдирдП рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдорд╛рди
global_env
рдореЗрдВ
area
рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛
area
ред
рдЕрдм, рдЬрдм рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
(area 3)
? рдХреНрдпреЛрдВрдХрд┐ рдХреНрд╖реЗрддреНрд░ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ (рдЕрдВрддрд┐рдо
else:
рдЕрдВрддрд┐рдо
else:
eval
), рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
area
рдЧрдгрдирд╛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рд╣реИ; рдЧрдгрдирд╛
3
рд░рд┐рдЯрд░реНрди
3
ред рддрдм (
eval
рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░), рддрд░реНрдХ рд╕реВрдЪреА
[3]
рд╕рд╛рде рдирд╡ рдирд┐рд░реНрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди
[3]
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ
exp
, рдЬреЛ рдХрд┐
['*', 3.141592653 ['*', 'r', 'r']]
рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЬрд╣рд╛рдБ
r
3
рдФрд░ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП
*
рдПрдХ рдЧреБрдгрди рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рдЕрдм рд╣рдо
Env
рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ:
рдХрдХреНрд╖рд╛ рдПрдирд╡ ( рддрд╛рдирд╛рд╢рд╛рд╣реА ) :
"рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг: рдПрдХ рдмрд╛рд╣рд░реА рдПрдирд╡ рдХреЗ рд╕рд╛рде {'var': val} рдЬреЛрдбрд╝реЗ рдХрд╛ рдПрдХ рддрд╛рдирд╛ред"
def __init__ ( рд╕реНрд╡рдпрдВ , parms = ( ) , args = ( ) , рдмрд╛рд╣рд░реА = рдХреЛрдИ рдирд╣реАрдВ ) :
рд╕реНрд╡ ред рдЕрджреНрдпрддрди ( рдЬрд╝рд┐рдк ( рдЕрд░реНрдз, рдЖрд░реНрдЧ ) )
рд╕реНрд╡ ред рдмрд╛рд╣рд░реА = рдмрд╛рд╣рд░реА
рдбреАрдИрдПрдл рдлрд╛рдЗрдВрдб ( рд╕реЗрд▓реНрдл , рд╡рд░ ) :
"рдЕрдВрддрд░рддрдо рдЦреЛрдЬреЗрдВ, рдЬрд╣рд╛рдВ var рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред"
рд╕реНрд╡ рдореЗрдВ рд╡рд╛рдкрд╕реА рдЕрдЧрд░ рд╕реНрд╡рдпрдВ рдореЗрдВ рд╡рд░ рд╕реНрд╡рдпрдВ ред рдмрд╛рд╣рд░реА ред рдЦреЛрдЬреЗрдВ ( var )
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
Env
рд╡рд░реНрдЧ рдПрдХ рдЙрдк-
dict
, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрдХреЛрд╢ рд╕рдВрдЪрд╛рд▓рди рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
__init__
рдФрд░
__init__
find
рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╡рд╛рддрд╛рд╡рд░рдг рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреБрдВрдЬреА (рд╕рд╛рде рд╣реА рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд┐ рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ
dict
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрдд рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рд░рдВрдЧ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рдХреЗ рд░рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо
a1
рдФрд░ рдХреЙрд▓
(a1 -20.00)
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдпреЗ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ $ 100 рдХреЗ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдФрд░ 20 рдбреЙрд▓рд░ рдХреА рдмрд╛рдж рдХреА рдирд┐рдХрд╛рд╕реА рдХреЗ рд╕рд╛рде рдПрдХ рдмреИрдВрдХ рдЦрд╛рддреЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрди
(a1 -20.00)
рджреМрд░рд╛рди
(a1 -20.00)
рд╣рдо рдкреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ 3 рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
amt
рдЪрд░ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдиреЗрд╕реНрдЯреЗрдб (рд╣рд░рд╛) рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рддреБрд░рдВрдд рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ
balance
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреНред рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЪрд░
+
рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╣рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ (рд▓рд╛рд▓) рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдФрд░ рдХрджрдо рдЙрдард╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдмрд╛рд╣рд░реА рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реБрдП рдЗрд╕ рдЦреЛрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╕реНрдХреВрдкрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
Procedure.find
рд╢рд╛рдмреНрджрд┐рдХ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╣реА рд╡рд╛рддрд╛рд╡рд░рдг рдкрд╛рддрд╛ рд╣реИред
рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд
+
рдФрд░ рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЙрди рд╕рднреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдкрд╛рдпрдерди рдореЗрдВ
math
рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 20 рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:
def add_globals ( env ) :
"рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдпреЛрдЬрдирд╛ рдорд╛рдирдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВред"
рдЖрдпрд╛рдд рдЧрдгрд┐рдд , рдСрдкрд░реЗрдЯрд░ рд╕реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ
envред рдЕрджреНрдпрддрди ( vars ( рдЧрдгрд┐рдд ) ) # рдкрд╛рдк, sqrt, ...
envред рдЕрджреНрдпрддрди (
{ '+' : opред рдЬреЛрдбрд╝реЗрдВ , '-' : opред рдЙрдк , '*' : opред mul , '/' : opред div , 'рдирд╣реАрдВ' : opред рдирд╣реАрдВ_
'>' : opред gt , '<' : opред lt , '> =' : opред ge , '<=' : opред le , '=' : opред eq,
'рдмрд░рд╛рдмрд░?' : рдСрдкред eq , 'eq?' : рдСрдкред is_ , 'рд▓рдВрдмрд╛рдИ' : len , 'cons' : lambda x, y: [ x ] + y,)
'рдХрд╛рд░' : рд▓реИрдореНрдмреНрдбрд╛ x: x [ 0 ] , 'cdr' : рд▓реИрдореНрдмреНрдбрд╛ x: x [ 1 : ] , 'рдПрдкреЗрдВрдб' : opред рдЬреЛрдбрд╝реЗрдВ ,
'рд╕реВрдЪреА' : рд▓рдВрдмреЛрджрд░ * x: рд╕реВрдЪреА ( x ) , 'рд╕реВрдЪреА?' : рд▓реИрдореНрдмреНрдбрд╛ x: isa ( x, рд╕реВрдЪреА ) ,
'рдЕрд╢рдХреНрдд?' : рд▓реИрдореНрдмреНрдбрд╛ x: x == [ ] , 'рдкреНрд░рддреАрдХ?' : рд▓реИрдореНрдмреНрдбрд╛ x: isa ( x, рдкреНрд░рддреАрдХ ) } )
рд╡рд╛рдкрд╕реА
global_env = add_globals ( Env ( ) )
рдкрд╛рд░реНрд╕рд┐рдВрдЧ: read
рдФрд░ parse
рдЕрдм
parse
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг , рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рд╡рд░реНрдгреЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ
рдЯреЛрдХрди , рдФрд░
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдЯреЛрдХрди рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓рд┐рд╕реНрдкреА рдЯреЛрдХрди рдмреНрд░реИрдХреЗрдЯ, рд╡рд░реНрдг (рдЬреИрд╕реЗ
set!
рдпрд╛
x
) рдФрд░ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
>>> рдХрд╛рд░реНрдпрдХреНрд░рдо = "(рд╕реЗрдЯ! x * 2 (* x 2))"
>>> рдЯреЛрдХрди ( рдХрд╛рд░реНрдпрдХреНрд░рдо )
[ ' ( ', ' рд╕реЗрдЯ! ', 'x * 2 ', ' ( ', ' * ', 'x', ' 2 ', ' ) ', ' ) ' ]
>>> рддреЛрддрд╛ ( рдХрд╛рд░реНрдпрдХреНрд░рдо )
[ ' рд╕реЗрдЯ! ',' x * 2 ', [ ' * ',' x ', 2 ] ]
рд╢рд╛рдмреНрджрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХ рд▓реЗрд╕рдХ рдФрд░ рдПрд░рд┐рдХ рд╢реНрдорд┐рдЯ
рджреНрд╡рд╛рд░рд╛ рд▓реЗрдХреНрд╕ ), рд▓реЗрдХрд┐рди рд╣рдо рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ: рд╣рдо рдкрд╛рдпрдерди
str.split
рдЙрдкрдпреЛрдЧ
str.split
ред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо
str.split
рдХреЙрд▓ рдХрд░рдХреЗ рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд
str.split
ред
рдЕрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд▓рд┐рд╕реНрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓рд┐рд╕реНрдк рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░реЛрдВ рдиреЗ
рдХрд┐рд╕реА рднреА рдЕрдХреНрд╖рд░ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдХреЗ рдФрд░ рднреА рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реВрдЪреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ
(set! 1 2)
рдХреЛ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХрд▓реА рд╕рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреЗрд╡рд▓ рд░рди рдХреЗ рд╕рдордп рд╣реА рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдЙрд╕
set!
рдХрд╕рдо рдЦрд╛рдПрдЧрд╛
set!
рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛, рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВред рдЬрд╛рд╡рд╛ рдпрд╛ рдкрд╛рдпрдерди рдореЗрдВ,
1 = 2
рд╕рдорддреБрд▓реНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рдЬрд╛рдПрдЧреАред рджреВрд╕рд░реА рдУрд░, рдЬрд╛рд╡рд╛ рдФрд░ рдкрд╛рдпрдерди рдХреЛ
x/0
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдЦреНрддреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд┐рд╕реНрдлреА рдиреЗ
read
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
parse
, рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рд╕рдВрдЦреНрдпрд╛, рд╡рд░реНрдг рдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪреА) рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред
read
рдлрд╝рдВрдХреНрд╢рди рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд
read_from
рдЯреЛрдХрди рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рдЯреЛрдХрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ; рдЕрдЧрд░ рдпрд╣
')'
рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рд╣реИред рдпрджрд┐ рдпрд╣
'('
, рддреЛ рд╣рдо рддрдм рддрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд
')'
рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗред
')'
рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЪрд░рд┐рддреНрд░ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕реНрд╡рдпрдВ рдореЗрдВ рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВред рдЕрдВрддрд┐рдо рдЪрд╛рд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реИ рдХрд┐
'2'
рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ,
'2.0'
рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд╣реИ, рдФрд░
x
рдПрдХ рдЪрд░рд┐рддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкрд╛рдпрдерди рдХреЛ рдЗрди рдЕрдВрддрд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ: рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рдмреНрд░реИрдХреЗрдЯреЗрдб рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЗрд╕реЗ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВред рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
рдбреАрдИрдПрдлрд╝ рд░реАрдб ( s ) :
"рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдПрдХ рдпреЛрдЬрдирд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрдврд╝реЗрдВред"
рд╡рд╛рдкрд╕реА рдкрдврд╝реЗрдВ_рдлреНрд░реЗрдо ( рдЯреЛрдХрди )
parse = рдкрдврд╝рд╛
tokenize ( s )
"рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓реЗрдВред"
рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ ред ( '(' , ' ' '' '' '' '' '' '' ) рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред рд╡рд┐рднрд╛рдЬрди ( )
def read_from ( рдЯреЛрдХрди ) :
"рдЯреЛрдХрди рдХреЗ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрдврд╝реЗрдВред"
рдЕрдЧрд░ рд▓реЗрди ( рдЯреЛрдХрди ) == 0 :
SyntaxError рдмрдврд╝рд╛рдПрдБ ( 'рдкрдврд╝рддреЗ рд╕рдордп рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд EOF' )
рдЯреЛрдХрди = рдЯреЛрдХрдиред рдкреЙрдк ( 0 )
рдпрджрд┐ '(' == рдЯреЛрдХрди) :
рдПрд▓ = [ ]
рдЯреЛрдХрди рдХреЗ рд╕рдордп [рдХреЛ реж ] ! = ')' :
рдПрд▓ред рдЬреЛрдбрд╝реЗрдВ ( read_from ( рдЯреЛрдХрди ) )
рдЯреЛрдХрдиред pop ( 0 ) # pop off ')' '
рд╡рд╛рдкрд╕реА L
рдПрд▓рд┐рдл ')' == рдЯреЛрдХрди :
SyntaxError ( 'рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд)' рдмрдврд╝рд╛рдПрдБ
рдФрд░ :
рд╡рд╛рдкрд╕реА рдкрд░рдорд╛рдгреБ ( рдЯреЛрдХрди )
рдбреАрдУрдЯреА рдПрдЯрдо ( рдЯреЛрдХрди ) :
"рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдмрди рдЬрд╛рддреА рд╣реИрдВ; рд╣рд░ рджреВрд╕рд░рд╛ рдЯреЛрдХрди рдПрдХ рдкреНрд░рддреАрдХ рд╣реИред"
рдХреЛрд╢рд┐рд╢ : рд╡рд╛рдкрд╕реА int ( рдЯреЛрдХрди )
рдорд╛рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ :
рдХреЛрд╢рд┐рд╢ : рд░рд┐рдЯрд░реНрди рдлреНрд▓реЛрдЯ ( рдЯреЛрдХрди )
рдорд╛рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ :
рд╡рд╛рдкрд╕реА рдкреНрд░рддреАрдХ ( рдЯреЛрдХрди )
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдкрдардиреАрдп рд▓рд┐рд╕реНрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА
to_string
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
to_string
рдлрд╝рдВрдХреНрд╢рди
to_string
, рдЬреЛ рдХрд┐ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░реАрдб-рдЗрд╡рд▓-рдкреНрд░рд┐рдВрдЯ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
to_string ( exp ) :
"рдкрд╛рдЗрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд▓рд┐рд╕реНрдк-рдкрдардиреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓реЗрдВред"
рд╡рд╛рдкрд╕реА '(' + '' ред рдЬреНрд╡рд╛рдЗрди ( рдирдХреНрд╢рд╛ ( to_string, exp ) ) + ')' ' рдЕрдЧрд░ is ( рдНрдХреНрд╕реНрдк, рд╕реВрдЪреА ) рдФрд░ рдЕрдзрд┐рдХ str ( exp )
def рдЙрддреНрддрд░ ( рд╢реАрдШреНрд░ = 'lis.py>' ) :
"рдкреНрд░рд╛рдВрдкреНрдЯ-рд░реАрдб-рдПрд╡рд▓-рдкреНрд░рд┐рдВрдЯ рд▓реВрдкред"
рдЬрдмрдХрд┐ рд╕рдЪ :
рд╡реИрд▓ = рдПрд╡рд▓ ( рдкрд╛рд░реНрд╕ ( рд░реЙ_рдЗрдирдкреБрдЯ ( рдкреНрд░реЙрдореНрдкреНрдЯ ) ) )
рдЕрдЧрд░ рд╡реИрд▓ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ : рдкреНрд░рд┐рдВрдЯ to_string ( рд╡реИрд▓ )
рдпрд╣рд╛рдБ рдХрд╛рдо рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╣реИ:
>>> рдЙрддреНрддрд░ ( )
lis.py > ( рдбрд┐рдлрд╛рдЗрди рдПрд░рд┐рдпрд╛ ( рд▓рдВрдмреЛрджрд░ ( r )) ( * 3.141592653 ( * r r ) ) )
lis.py > ( рдХреНрд╖реЗрддреНрд░ 3 )
реирео.реирен,рекрей,рейрей,реоренрен
lis.py > ( рдбрд┐рдлрд╝рд╛рдЗрдВрдб рдлреИрдХреНрдЯ ( рд▓рдВрдмреЛрджрд░ ( n ) ( рдпрджрд┐ ( <= n 1 ) 1 ( * n ( рддрдереНрдп ( - n 1 ) ) ) ) )
lis.py > ( рддрдереНрдп 10 )
3628800
lis.py > ( рддрдереНрдп 100 )
9332621544394415268169923885626670049071596826438162146859296389521759999322991
5608941463976156518286253697920827223758251185210916864000000000000000000000000
lis.py > ( рдХреНрд╖реЗрддреНрд░ ( рддрдереНрдп 10 ) )
4.1369087198e + 13
lis.py > ( рдкрд╣рд▓реА рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ )
lis.py > ( рдбрд┐рдлрд╛рдЗрди рд░реЗрд╕реНрдЯ рд╕реАрдбреАрдЖрд░ )
lis.py > ( рдбрд┐рдлрд╛рдЗрди рдХрд╛рдЙрдВрдЯ ( рд▓рдВрдмреЛ ( рдЖрдЗрдЯрдо L )) ( рдпрджрд┐ L ( + ( рдмрд░рд╛рдмрд░ ; рдЖрдЗрдЯрдо ( рдкрд╣рд▓рд╛ L ) )) ( рдХрд╛рдЙрдВрдЯ рдЖрдЗрдЯрдо ( рдмрд╛рдХреА L ) ) ) 0 ) )
lis.py > ( рдЧрдгрдирд╛ 0 ( рд╕реВрдЪреА 0 1 2 3 0 0 ) )
3
lis.py > ( рдЧрд┐рдиреЗрдВ ) ( рдЙрджреНрдзрд░рдг ) ( рднрд╛рд╡ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ ) )
4
рд▓рд┐рд╕реНрдкреА рдХрд┐рддрдирд╛ рдЫреЛрдЯрд╛ / рддреЗрдЬ / рдкреВрд░реНрдг / рдЕрдЪреНрдЫрд╛ рд╣реИ?
рд╣рдо рд▓рд┐рд╕рдкреА рдХреЛ рдирд┐рдореНрди рдорд╛рдирджрдВрдбреЛрдВ рд╕реЗ рдкрд░рдЦреЗрдВрдЧреЗ:
- рдЖрдХрд╛рд░: рд▓рд┐рд╕реНрдлреА рдЫреЛрдЯреЗ, рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд┐рдирд╛ 90 рд▓рд╛рдЗрдиреЗрдВ, 4K рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдХрдоред рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ 96 рд▓рд╛рдЗрдиреЗрдВ рдереАрдВ - рдореИрдВрдиреЗ
Procedure
рд╡рд░реНрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдпрдерди lambda
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░рд┐рдХ рдХреВрдкрд░ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ред рдореЗрд░реА рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЬрд╛рд╡рд╛ рд╕рдВрд╕реНрдХрд░рдг ( Jscheme ) 1664 рд▓рд╛рдЗрдиреЛрдВ рдФрд░ 57K рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирд╛ рдерд╛ред Jsceheme рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ SILK (рд╕реНрдХреАрдо рдЗрди рдлрд┐рдлреНрдЯреА рдХрд┐рд▓реЛрдмрд╛рдЗрдЯреНрд╕, рд╕реНрдХреАрдо рдЗрди 50 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯреНрд╕) рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдпреЛрдЯреЗрдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 1972 рдПрд▓рди Kay рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк "рдХреЛрдб рдкреЗрдЬ" рдореЗрдВ "рджреБрдирд┐рдпрд╛ рдХреА рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рднрд╛рд╖рд╛" рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ ред
bash $ grep "^ \ s * [^ # \ s]" lis.py | WC
90 398 3423
- рдЧрддрд┐: 0.004 рд╕реЗрдХрдВрдб рдореЗрдВ рд▓рд┐рд╕реНрдкреА рдЧрдгрдирд╛
(fact 100)
ред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рддреЗрдЬреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдЧрд┐рдирдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ)ред
- рдкреВрд░реНрдгрддрд╛: рд▓рд┐рд╕реНрдлреА рдпреЛрдЬрдирд╛ рдорд╛рдирдХ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
- рд╕рд┐рдВрдЯреИрдХреНрд╕: рд▓рд╛рдкрддрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ, рдЙрджреНрдзреГрдд / рдЕрд░реНрдз-рдЙрджреНрдзрд░рдг, # рд╢рд╛рдмреНрджрд┐рдХ, рд╡реНрдпреБрддреНрдкрдиреНрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕реЗ рдХрд┐
cond
, if
рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди, рдпрд╛ let
, рд▓рдВрдмреЛ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди), рдФрд░ рдмрд┐рдВрджреАрджрд╛рд░ рд╕реВрдЪреА рд╕рдВрдХреЗрддрдиред
- рд╢рдмреНрджрд╛рд░реНрде: рд▓рд╛рдкрддрд╛ рдХреЙрд▓ / рд╕реАрд╕реА рдФрд░ рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред
- рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░: рдХреЛрдИ рд▓рд╛рдЗрдиреЗрдВ, рдПрдХрд▓ рд╡рд░реНрдг, рдмреВрд▓рд┐рдпрди рдкреНрд░рдХрд╛рд░, рдкреЛрд░реНрдЯ, рд╡реИрдХреНрдЯрд░, рд╕рдЯреАрдХ / рдЧрд▓рдд рд╕рдВрдЦреНрдпрд╛ред рдкрд╛рдпрдерди рдореЗрдВ рд╕реВрдЪрд┐рдпрд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡реИрдХреНрдЯрд░ рдХреЗ рдХрд░реАрдм рд╣реИрдВред
- рдХрд╛рд░реНрдп: 100 рд╕реЗ рдЕрдзрд┐рдХ рдЖрджрд┐рдо рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрд╛рдпрдм рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдЕрдиреНрдп (рдЬреИрд╕реЗ
set-car!
рдФрд░ set-cdr!
рд╣рдо set-cdr!
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ set-cdr!
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдпрдерди рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) ред
- рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ: рд▓рд┐рд╕реНрдлреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдпрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред Lispy рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрддреНрдХреГрд╖реНрдЯрддрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред
- рдЕрдЪреНрдЫрд╛: рдпрд╣ рдкрд╛рдардХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдореБрдЭреЗ рд▓рд┐рд╕реНрдк рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
рд╕рдЪреНрдЪреА рдХрд╣рд╛рдиреА
рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдкрд░ рд▓реМрдЯрдирд╛ рдХрд┐ рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдХрд╣рд╛рдиреА рдмрддрд╛рдКрдВрдЧрд╛ред 1984 рдореЗрдВ, рдореИрдВрдиреЗ рдбреЙрдХреНрдЯрд░реЗрдЯ рд╢реЛрдз рдкреНрд░рдмрдВрдз рд▓рд┐рдЦрд╛ред рдпрд╣ LaTeX рд╕реЗ рдкрд╣рд▓реЗ рдерд╛, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡рд░реНрдб рд╕реЗ рдкрд╣рд▓реЗ - рд╣рдордиреЗ рдЯреНрд░реЙрдл рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЯреНрд░реЙрдл рдХреЗ рдкрд╛рд╕ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓реЗрдмрд▓реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛: рдореИрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ "рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо @theoremx рдкреГрд╖реНрда рдкрд░ рджреЗрдЦреЗрдВрдЧреЗ" рдФрд░ рдлрд┐рд░ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдореЗрдВ "@ (рд╕реЗрдЯ рдкреНрд░рдореЗрдХреНрд╕ \ n%)" рдЬреИрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦреЗрдВ ( рдЯреНрд░реЙрдлрд╝ рдЖрд░рдХреНрд╖рд┐рдд \ n% рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдореЗрд░реЗ рджреЛрд╕реНрдд рдЯреЛрдиреА рдбреЗрд░реЛрд╕ рдХреЛ рднреА рдРрд╕реА рд╣реА рдЬрд░реВрд░рдд рдорд╣рд╕реВрд╕ рд╣реБрдИ, рдФрд░ рд╕рд╛рде рдореЗрдВ рд╣рдордиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓рд┐рд╕реНрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рдЬреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рд▓рд┐рд╕реНрдк рдерд╛ рд╡рд╣ рд▓рд┐рд╕реНрдк рдХреЗ рднрд╛рд╡реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рдм рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдзреАрдорд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ред
рдЯреЛрдиреА рдФрд░ рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЧрдПред рдЙрдирдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрдерд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рд╕реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рд▓реЗрдХрд┐рди рд╡рд╣ рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рдЧреИрд░-рд▓рд┐рд╕реНрдк рдкрд╛рддреНрд░реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рд▓рд┐рд╕реНрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕реА рд╕рдмрд░реВрдЯреАрди рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рдмрдВрдзрди рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрдерд╛ рдХрд┐ рдЗрд╕ рддреБрдЪреНрдЫ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦрдирд╛ (рдпрд╣ рд╕рдм рдЗрд╕рдореЗрдВ рдерд╛ - рдПрдХ рдЪрд░ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛, рдПрдХ рдЪрд░ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рддрд╛рд░ рдЬреЛрдбрд╝рдирд╛) рдПрдХ рд╕рд░рд▓ рдХрд╛рдо рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рджреБрднрд╛рд╖рд┐рдП рдХреЛ рд╕реА рдореЗрдВ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдпрд╛ред рдЙрд╕ рдЯреЛрдиреА рдиреЗ рд▓рд┐рд╕реНрдк рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рд╕реА рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд▓рд┐рд╕реНрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдерд╛ред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рджреЛрдиреЛрдВ рдиреЗ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред
рд╕рднреА рдПрдХ рд╕рд╛рде
рдкреВрд░реНрдг рд▓рд┐рд╕реНрдлрд╝реА рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ:
lis.py