(рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ (рд▓рд┐рд╕реНрдк) рджреБрднрд╛рд╖рд┐рдпрд╛)



рдкреАрдЯрд░ рдиреЙрд░рд╡рд┐рдЧ рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж (рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ (рд▓рд┐рд╕реНрдк) рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░) рдкрд╛рдпрдерди рдореЗрдВ)ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдкреАрдЯрд░ рдХрд╛рдлреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рджреБрднрд╛рд╖рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдпреЛрдЬрдирд╛ рднрд╛рд╖рд╛ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рдЫреЛрдЯреЗ (рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдореЗрдВ 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 ; рд╕рдВрдЦреНрдпрд╛ - рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдЗрдЯреИрд▓рд┐рдХ рдореЗрдВ рдмрд╛рдХреА рд╢рдмреНрдж рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрджрдирд╛рдо рдНрдХреНрд╕реНрдк ... рдХрд╛ рдЕрд░реНрде рд╣реИ рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рдПрдХреНрд╕рдк рд░рд┐рдкрд┐рдЯрд┐рд╢рдиред

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

рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ


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

рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд▓рдШреБ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ 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


рд▓рд┐рд╕реНрдкреА рдХрд┐рддрдирд╛ рдЫреЛрдЯрд╛ / рддреЗрдЬ / рдкреВрд░реНрдг / рдЕрдЪреНрдЫрд╛ рд╣реИ?


рд╣рдо рд▓рд┐рд╕рдкреА рдХреЛ рдирд┐рдореНрди рдорд╛рдирджрдВрдбреЛрдВ рд╕реЗ рдкрд░рдЦреЗрдВрдЧреЗ:


рд╕рдЪреНрдЪреА рдХрд╣рд╛рдиреА


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

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

рдЕрдВрдд рдореЗрдВ, рд╣рдо рджреЛрдиреЛрдВ рдиреЗ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред

рд╕рднреА рдПрдХ рд╕рд╛рде


рдкреВрд░реНрдг рд▓рд┐рд╕реНрдлрд╝реА рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ: lis.py

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


All Articles