рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦрд╣рдо рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
рдЕрдм рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдпрд╣ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рд╣рдо рд╕рдВрдХреЗрддрди рдореЗрдВ рджрд┐рдП рдЧрдП рдмреАрдЬреАрдп рд╕реВрддреНрд░ рдХреА рдЧрдгрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рдХрд╛рд░реНрдп рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕реНрдХреВрд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдереЗ, рддреЛ рд╣рдореЗрдВ рд╕реВрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд┐рд╕реНрдк рдХрд░реНрдиреЗрд▓ рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ (рд░рди рдЯрд╛рдЗрдо рдкрд░)ред рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕реВрддреНрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХреЗрддрди рд╕реЗ рд▓рд┐рд╕реНрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдЬрд┐рд╕ рд╕рдВрдХреЗрддрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЙрд╕реЗ "рдЗрдиреНрдлрд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди" (рдСрдкрд░реЗрд╢рди рд╕рдВрдХреЗрдд рдСрдкрд░реЗрдВрдб рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рдд рд╣реИ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рд┐рд╕реНрдк рдореЗрдВ, рдСрдкрд░реЗрд╢рди рд╕рд╛рдЗрди рдХреЛ рдСрдкрд░реЗрдВрдбреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рддрд░рд╣ рдХреЗ рдиреЛрдЯреЗрд╢рди рдХреЛ "рдкреНрд░реАрдлрд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп infix рд░реВрдк рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИред
рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
рдореИрдВ рд╕реВрддреНрд░ рдХреЛ рддрдерд╛рдХрдерд┐рдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ "рд░рд┐рд╡рд░реНрд╕ рдкреЛрд▓рд┐рд╢ рдлреЙрд░реНрдо" (SCF)ред рд░рд┐рд╡рд░реНрд╕ рдкреЛрд▓рд┐рд╢ рдиреЛрдЯреЗрд╢рди (рдкреЛрд▓рд┐рд╢ рдЧрдгрд┐рддрдЬреНрдЮ рд▓реБрдХрд╛рд╢реЗрд╡рд┐рдЪ рдХреЗ рдирд╛рдо рдкрд░) рд╕рдВрдХреЗрддрди рдХрд╛ рдПрдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд░реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдВрдХреЗрдд рдСрдкрд░реЗрдВрдбреНрд╕ ("рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди") рдХреЗ рдмрд╛рдж рд╕реНрдерд┐рдд рд╣реИрдВред рдЙрдкрд╕рд░реНрдЧ рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред "рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ" - рддреБрд░рдВрдд infix рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдлреИрд╕рд▓рд╛ рдХреБрдЫ рдЬреНрдпрд╛рджрд╛ рд╣реА рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рд╣рдо рдПрд╕рд╕реАрдЖрд░ рдореЗрдВ рд╕реВрддреНрд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд▓рдЧреЗ рд░рд╣реЗрдВрдЧреЗред рдЗрдирдкреБрдЯ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдлрд╝рд┐рдХреНрд╕ рдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рдмреАрдЬрдЧрдгрд┐рддреАрдп рд╕реВрддреНрд░ рд╣реИ, рдЬрд┐рд╕реЗ рд▓рд┐рд╕реНрдк рдмрд╣реБ-рд╕реНрддрд░реАрдп рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ:
(12 + x / ( y ^ 2 + z ^ 4))
SCR рдореЗрдВ, рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ - рд╡рд┐рдЪрд┐рддреНрд░) рд░реВрдк рд╣реЛрдВрдЧреЗ:
(12 xy 2 ^ z 4 ^ + / +)
SCR рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдЯреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬреЛ "рдЕрдВрддрд┐рдо рд░реВрдк - рдкрд╣рд▓реЗ рдЬрд╛рдирд╛") рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИред рдЧрдгрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╕реВрдЪреА рдХреЛ рдПрдХ рдмрд╛рд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ:
- рд╕рдВрдЦреНрдпрд╛ (рдЪрд░ рдорд╛рдиреЛрдВ) рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рдСрдкрд░реЗрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрд╕рд╕реАрдПрдл рдореЗрдВ рдХреЛрдИ рдХреЛрд╖реНрдардХ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдСрдкрд░реЗрд╢рди рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ (рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрдиреНрдлрд┐рдХреНрд╕ рд░реВрдк рдореЗрдВ, рдЕрдм рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВ)ред
рдЬрд┐рд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рдо SCR рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдБ, рдЪрд░, рдХрд╛рд░реНрдп рдФрд░ рд╕рдВрдЪрд╛рд▓рди рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рдЪрд░ рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛ рд▓реЗрдВ рдФрд░ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЪрд░рд┐рддреНрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: рдпрджрд┐ рд╕реВрдЪреА рдореЗрдВ рд╡рд░реНрдг рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рдЪрд░ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди / рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреА
рд╕рдорддрд╛ (рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрдЪрд╛рд▓рди рдХреА рдПрдХ рдореВрд▓ рд╕реВрдЪреА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
(setq *oplist* '((+ 2) (- 2) (* 2) (/ 2) (^ 2) (\ 2) (% 2) (= 2) (== 2) (/= 2) (> 2) (>= 2) (< 2) (<= 2) (and 2) (or 2) (not 1) (sin 1) (cos 1) (abs 1) (exp 1) (log 1) (sqrt 1)))
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдпрд╣ рд╕реВрдЪреА рдмрдврд╝ рд╕рдХрддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдЙрдирдХреЗ рдЖрд░реНрдЗрдЯреА рдХреЗ рдирд╛рдо рдХреЛ * рдУрдкрд▓рд┐рд╕реНрдЯ * рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ-рдЦрд░реАрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЦрд░реАрдж рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред * Oplist * рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд╖реНрдЯ)ред рдФрд░ рдПрдХреНрд╢рди-рдкреНрд░реЙрдХреНрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
(cond ((eq (car stmt) 'proc) (setq proc-name (nth 1 stmt)) (setq proc-parm (nth 2 stmt)) (setq *oplist* (cons (list proc-name (length proc-parm)) *oplist*)))
рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ:
(defun prty (OP) (cond ((EQ OP 'and) 1) ((EQ OP 'or) 1) ((EQ OP '>) 2) ((EQ OP '>=) 2) ((EQ OP '<) 2) ((EQ OP '<=) 2) ((EQ OP '=) 2) ((EQ OP '==) 2) ((EQ OP '/=) 2) ((EQ OP '+) 3) ((EQ OP '-) 3) ((EQ OP '*) 4) ((EQ OP '/) 4) ((EQ OP '\) 4) ((EQ OP '%) 4) ((EQ OP '^) 5) ((member op (mapcar 'car *oplist*)) 6)))
рд╕рдмрд╕реЗ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди "рдФрд░" рдФрд░ "рдпрд╛" рдХреЛ рджреА рдЬрд╛рддреА рд╣реИред рдлрд┐рд░ рддреБрд▓рдирд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди, рдлрд┐рд░ рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ рдЖрджрд┐ рд╣реЛрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдПрд╕рд╕реАрдЖрд░ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред Inf2ipn рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрдирдкреБрдЯ рд╕реВрддреНрд░) рдФрд░ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ (рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдФрд░ рд╕рдВрдЪрд╛рдпрдХ рд╕реВрдЪреА) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдмреИрдЯрд░реА рд╕реВрдЪреА рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рд╕реВрдЪреА рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
- рдпрджрд┐ рдЗрд╕рдХрд╛ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдПрдХ рдЪрд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмреИрдЯрд░реА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рдПрдХ рд╕реВрдЪреА рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмреИрдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИ, рддреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рдЦрд╛рд▓реА рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде, рдЕрдЧрд▓рд╛ рддрддреНрд╡ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде, рдЗрдирдХрдорд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рдЖрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рдвреЗрд░ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рд╕рдВрдЪрд╛рдпрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирдП рдЖрдпреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдЗрдирдкреБрдЯ рд╕реВрдЪреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЙрд▓рдЯ рдмреИрдЯрд░реА (рдЯрд░реНрдорд┐рдирд▓ рд╢рд╛рдЦрд╛) рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдкрд╣рд▓реЗ рд╕реЗ рдЬреБрдбрд╝реА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдЙрд▓рдЯ рдмреИрдЯрд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдСрдкрд░реЗрдВрдб рд╕реЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд░рд┐рддреНрд░ рд╡реИрд╢реНрд╡рд┐рдХ * рдУрдкрд▓рд┐рд╕реНрдЯ * рд╕реВрдЪреА рдореЗрдВ рд╣реИ:
(defun is-op (o) (member o (mapcar 'car *oplist*)))
рдФрд░ SCR рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░реВрдк рд╣реИ:
(defun inf2ipn (f &optional (s nil) (r nil)) (cond ((null f) (if (null s) (reverse r) (inf2ipn nil (cdr s) (cons (car s) r)))) ((listp (car f)) (inf2ipn (cdr f) s (append (reverse (inf2ipn (car f))) r))) ((numberp (car f)) (inf2ipn (cdr f) s (cons (car f) r))) ((not (is-op (car f))) (inf2ipn (cdr f) s (cons (car f) r))) (t (cond ((null s) (inf2ipn (cdr f) (cons (car f) s) r)) ((> (prty (car f)) (prty (car s))) (inf2ipn (cdr f) (cons (car f) s) r)) (t (let ((a (car s))) (inf2ipn (cdr f) (cons (car f) (cdr s)) (cons ar))))))))
рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(inf2ipn '(2 + 3 * 6)) ==> (2 3 6 * +) (inf2ipn '((2 + 3) * 6)) ==> (2 3 + 6 *) (inf2ipn '(3 + a * sin ( 5 + x))) ==> (3 A 5 X + SIN * +)
SCR рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред Ipn2inf рдлрд╝рдВрдХреНрд╢рди рдПрд╕рд╕реАрдЖрд░ рдФрд░ рдбреНрд░рд╛рдЗрд╡ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдпрджрд┐ рдЗрдирдкреБрдЯ рд╕реВрдЪреА рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдбреНрд░рд╛рдЗрд╡ рд╣реЗрдб рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ;
- рдпрджрд┐ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЪрд░ рд╣реИ, рддреЛ рдпрд╣ рдкрд░рдорд╛рдгреБ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ;
- рдпрджрд┐ рдЕрдЧрд▓рд╛ рддрддреНрд╡ arity n рдХрд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИ, рддреЛ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рддреАрдХ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рд╕реВрдЪреА рдФрд░ рд▓рдВрдмрд╛рдИ n рдХреА рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдПрдХ рдЙрд▓реНрдЯрд╛ рдЦрдВрдб рдкрд╣рд▓реЗ n рддрддреНрд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреЛрдб рдореЗрдВ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рдХреЛрдб рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
(i2p '(3 + a * sin ( 5 + x))) ==> (+ 3 (* A (SIN (+ 5 X)))) (i2p '((3 + a) * sin ( 5 ) + x)) ==> (* (+ 3 A) (+ (SIN 5) X)) (i2p '((3 + a) * sin ( 5 ^ 2 - x ) + x)) ==> (* (+ 3 A) (+ (SIN (- (^ 5 2) X)) X))
рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
(defun action-set (meat) (let ((name-var (car meat)) (r-value (i2p (cddr meat)))) `(setq ,name-var ,r-value)))
рдорд╛рдВрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ:
( = )
рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреА рдорд╛рдиреНрдпрддрд╛ рдПрдХреНрд╢рди-рдкреНрд░реЛрдХ рдлрдВрдХреНрд╢рди рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдлреЙрд░реНрдо рд▓реЗрддрд╛ рд╣реИ:
(defun action-proc (fi) (let ((stmt nil) (proc-name nil) (proc-parm nil) (loc-var nil) (lv nil) (body nil)) (loop (setq stmt (mk-intf (getLine fi))) (when (null stmt) (return t)) (cond ((eq (car stmt) 'proc) (setq proc-name (nth 1 stmt)) (setq proc-parm (nth 2 stmt))) ((eq (car stmt) 'end_proc) (return t)) ((eq (car stmt) 'print) (setq body (append body (list (cons 'printline (cdr stmt)))))) ((eq (car stmt) 'input) (setq body (append body (list (list 'setq (cadr stmt) (list 'read) ))))) ((eq (car stmt) 'local) (setq loc-var (append loc-var (cdr stmt)))) ((eq (cadr stmt) '=) (setq body (append body (list (action-set stmt))))) (t (printsline (strCat "**** " (output stmt) " ")) (setq *flagerr* t)))) (iter (for a in (setof loc-var)) (collecting (list a 0) into lv)) `(defun ,proc-name ,proc-parm (let ,lv ,@body))))
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рд╣рдо рд▓рд┐рд╕реНрдк рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреЛрдб рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рд╛рд░рдВрдн рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ:
0001 proc main()
0002 local x,y,z
0003 x=3
0004 y=4
0005 z=x^2+y^2
0006 print z
0007 end_proc
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛:
(getd 'main) ==> (EXPR NIL (LET ((X 0) (Y 0) (Z 0)) (SETQ X 3) (SETQ Y 4) (SETQ Z (+ (^ X 2) (^ Y 2))) (PRINTLINE Z)))
рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЕрдм, рдЪрд▓реЛ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
(main) 25 ==> 25
рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗред рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ:
0001 proc main()
0002 local x,y,z,pi
0003 pi=3.1415926535
0004 x=sin(pi/6)
0005 y=cos(pi/6)
0006 z=x^2+y^2
0007 print x
0018 print y
0019 print z
0010 end_proc
рдФрд░ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
(main) 0.499999999987039 0.866025403791922 1.0 ==> 1.0
рд╣рдорд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрдХ рд╣рдорд╛рд░реА рдЖрдБрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЬреАрд╡рди рдореЗрдВ рдЖрддрд╛ рд╣реИ!
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдмрд╣реБрдд рджреВрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛: рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЙрди рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдореЗрдВ рдЕрднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЕрднреА рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╣рдо рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЧрдП, рдФрд░ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдФрд░ рдирд┐рджрд╛рди рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ "рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░" рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ)ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдЗрди рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПрдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдХреЛрдб
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИред