рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦрддреНрд░реБрдЯрд┐рдпрд╛рдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдВ ...
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмреЗрд╣рддрд░ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рд╣реИ (рд░реЛрдХрдерд╛рдо рд╣рдореЗрд╢рд╛ рдЗрд▓рд╛рдЬ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ!)ред рдПрд░реЛрдмреЗрдЯрд┐рдХреНрд╕ - рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╡рд╛рдж рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдмрд╛рдж рд╡рд╛рд▓реЗ рдмрд╕ рдЧрд▓рддреА рди рдХрд░ рд╕рдХреЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЙрддреНрддрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЧреИрд░-рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд░реНрдг рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрдирдкреБрдЯ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЧреИрд░-рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ!
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реА рддрдХрдиреАрдХ рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рдЬрд╝рд╛рдЗрдиреЛрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдЗрдирдкреБрдЯ рдорд╛рд╕реНрдХ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ "рдЧрд▓рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╛рдЯрдиреЗ" рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред
рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╣реИ, рдФрд░ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдЧрд▓рдд рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдкрд╛рда рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рдпрджрд┐ рдЕрдиреБрд╡рд╛рджрдХ "рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ" рдкрдХрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдпрд╣ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо "рдХреНрд░реИрд╢" рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЛрдб рдХреЛ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ (рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рдЪрд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реНрдЯрд╛рд░реНрдЯ рдлрдВрдХреНрд╢рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИ? рд╡рд╣ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд▓реЗрддреА рд╣реИ, рдЙрд╕реЗ рдЦреЛрд▓рддреА рд╣реИ, рдФрд░ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрди рдмрдирд╛рддреА рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкрд░рд┐рджреГрд╢реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдмрд╕реЗ" рд╣реИ - рдЗрд╕реЗ рд╡рд┐рд╣рд┐рдд рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдорд╛рдирдХ "рдУрдкрди" рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ;
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ "рдУрдкрди" рд╕рдВрд╡рд╛рдж рдореЗрдВ "рдЗрдВрдХрд╛рд░" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ - рдмрдВрдж рдХрд░реЗрдВ;
- рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рджрд┐рдП рдЧрдП / рджрд░реНрдЬ рдирд╛рдо рд╡рд╛рд▓реА рдлрд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд░реЗрдВ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ;
- рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред
рдкреНрд░рд╛рд░рдВрдн рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:
(defun start (&optional (fname "")) (setq *numline* 0) (setq *flagerr* nil) (setq *oplist* тАж)
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ "рдЕрд╕реНрд╡реАрдХрд╛рд░" рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо "рдХреНрд░реИрд╢" рд╣реЛрдЧрд╛ред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рджреЛрд╖ рдХрдорд┐рдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрджрд┐ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдВрддрд┐рдо рд╣реИ, рддреЛ рдлрд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рд╕реНрдк рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрдХреНрд░ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред
рдЗрди рджреЛрд╖реЛрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВ:
(defun start (&optional (fname "")) (setq *numline* 0) (setq *flagerr* nil) (setq *oplist* тАж ) (when (zerop (strLen fname)) (setq fname (sysGetOpenName (sysHome) "-|*.mbs"))) (if (and fname (filExistp fname)) (let ((fi (gensym 'fi))) (filOpen fi fname _INPUT) (loop (let ((curr-proc (action-proc fi))) (when *flagerr* (return t)) (when curr-proc (eval curr-proc)) (when (filEOF fi) (return t)))) (filClose fi) (when *flagerr* (printsline "**** "))) (printsline (if fname (strCat "**** " fname " ") "**** "))) (unset '*numline*) (unset '*flagerr*) (unset '*oplist*))
рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рд╕рдВрджреЗрд╢ рдореБрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ: "рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ" рдпрд╛ "рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛"ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдореБрдЦреНрдп рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИрдВ:
- рдлрдВрдХреНрд╢рди рдПрдХреНрд╢рди-рдкреНрд░реЛрдХреНрдпреЛрд░ рдкреВрд░рд╛ рд╣реБрдЖред рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╡рдХреНрд░-рдЦрд░реАрдж рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ;
- рдпрджрд┐ * рдзреНрд╡рдЬрд╡рд╛рд╣рдХ * рдЭрдВрдбрд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реВрдк рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ;
- рдпрджрд┐ рдХреНрд░рд┐рдпрд╛-рдЦрд░реАрдж рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдПрдХ рдЧреИрд░-рд░рд┐рдХреНрдд рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдпрд╛, рддреЛ рдЙрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рд╕реНрдк рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрдд рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реВрдк рднреА рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдб рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛ ... рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЧрдВрднреАрд░ рджреЛрд╖ рдЕрдирд╕реБрд▓рдЭрд╛ рд░рд╣рд╛ - рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдореБрдЦреНрдп рд▓реВрдк рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреАрдЫреЗ рд╕реНрдерд┐рдд рдореВрд▓ рд╡рд░реНрд╖ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдмреБрд░рд╛ рд╣реИ - рдореИрдВ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ "рдПрд░рд░ рдХрд╛рдЙрдВрдЯрд░" рдХреА рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдПрдВрдЧреЗред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐ рдзреНрд╡рдЬ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
(defun start (&optional (fname "")) (setq *numline* 0) (setq *flagerr* nil) (setq *errcount* 0) (setq *oplist* тАж) (when (zerop (strLen fname)) (setq fname (sysGetOpenName (sysHome) "-|*.mbs"))) (if (and fname (filExistp fname)) (let ((fi (gensym 'fi))) (filCloseAll) (filOpen fi fname _INPUT) (loop (let ((curr-proc (action-proc fi))) (when *flagerr* (setq *errcount* (add1 *errcount*))) (when (and curr-proc (not *flagerr*)) (eval curr-proc)) (setq *flagerr* nil) (when (filEOF fi) (return t)))) (filClose fi) (when (> *errcount* 0) (printsline "**** "))) (printsline (if fname (strCat "**** " fname " ") "**** "))) (unset '*numline*) (unset '*flagerr*) (unset '*oplist*) (unset '*errcount*))
рдЕрдм, рдкреНрд░рд╛рд░рдВрдн рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░реНрдп рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред рдЪрд▓реЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрди рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
* * * proc test1(x) local y y=x^2 bla-bla end_proc * * * proc test2() local x,y input x y=test1(x) print y end_proc * * * proc test3(x) bla-bla-bla print x end_proc
рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рдЗрд╕реЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рджреЗрдВ"ред рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
0001 * 0002 * 0003 * 0004 proc test1(x) 0005 local y 0006 y=x^2 0007 bla-bla **** (BLA - BLA) 0008 end_proc 0009 * 0010 * 0011 * 0012 proc test2() 0013 local x,y 0014 input x 0015 y=test1(x) 0016 print y 0017 end_proc 0018 * 0019 * 0020 * 0021 proc test3(x) 0022 bla-bla-bla **** (BLA - BLA - BLA) 0023 print x 0024 end_proc 0025 ****
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╕рд╛рде рдореБрдХрд╛рдмрд▓рд╛ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди "рдмрдЧ рдкрд░ рдХрд╛рдо" рдЕрднреА рд╢реБрд░реВ рд╣реБрдЖ рд╣реИред рдЖрдЗрдП рдЙрд╕ рднрд╛рд╖рд╛ рдХреЗ рдЙрд╕ рднрд╛рдЧ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред
рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЖрдо рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рдЬреЛ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдЧрд▓рдд рдмреНрд░реИрдХреЗрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рдЕрд╕рдВрддреБрд▓рд┐рдд рдпрд╛ рдЧрд▓рдд рдХреНрд░рдо рдХреЛрд╖реНрдардХ рдореЗрдВ)ред рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдпрд╛рдж рдХрд░реЗрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЯреЛрдХрди рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ), рдФрд░ рдлрд┐рд░ рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдХреЛ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪреА рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдореЗрдВ, рдХреЛрд╖реНрдардХ рдЕрд▓рдЧ рдЯреЛрдХрди рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдирдХреЗ рд╕рдВрддреБрд▓рди рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдЗрдирдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд▓рд┐рд╕реНрдк рд╕реВрдЪреА рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЗрдирдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдореЗрдВ рдПрдХ рдЧрд▓рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╛рд╕ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЖрдЗрдП рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВред
HomeLisp рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ -1 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ -1 рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ)ред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ -1 рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдкреВрд░реЗ рдкреНрд░рдпрд╛рд╕ рдлреЙрд░реНрдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ;
- рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ -2 рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрд░реЛрдореЗрд╕реЗрдЬ) рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рдкрд╛рда рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдкреВрд░реНрд╡рдЧрд╛рдореА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реВрдЪреА рдкреНрд░рдкрддреНрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
(defun mk-intf (txt) (let ((lex (parser txt " ," "()+-*/\^=<>%")) (intf "")) (iter (for a in lex) (setq intf (strCat intf a " "))) (try (input (strCat "(" intf ")")) except (progn (printsline (strCat "**** " (errormessage))) `(,txt) ))))
рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рддрддреНрд╡ рдХреА рдПрдХ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА - рдХреЛрдб рдХреА рдореВрд▓ рдкрдВрдХреНрддрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реВрдЪреА рдХрд╛рд░реНрд░рд╡рд╛рдИ-рдЦрд░реАрдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА (рдЕрдЧрд▓реЗ рдмрдпрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ)ред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕реЗ рдорд╛рдиреНрдпрддрд╛ рдирд╣реАрдВ рджреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ:
* * * proc test1(x) local y y=(x^2)) end_proc * * * proc test2() local x,y input x y=test1(x) print y end_proc * * * proc test3(x) x=3+)x^2 print x end_proc
рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛:
0001 * 0002 * 0003 * 0004 proc test1(x) 0005 local y 0006 y=(x^2)) **** **** ("y=(x^2))") 0007 end_proc 0008 * 0009 * 0010 * 0011 proc test2() 0012 local x,y 0013 input x 0014 y=test1(x) 0015 print y 0016 end_proc 0017 * 0018 * 0019 * 0020 proc test3(x) 0021 x=3+)x^2 **** **** ("x=3+)x^2") 0022 print x 0023 end_proc ****
рдЕрдм рдЖрдЗрдП рдЙрд╕ рдХреЛрдб рдкрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдЬреЛ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╕рдВрдХреЗрддрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд╛рдлреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЪрд▓реЛ рдЗрд╕ рдЧрд▓рддреА рдХреЛ рдареАрдХ рдХрд░реЛред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджреЛрд╖ (рджрд┐рдЦрдиреЗ рдореЗрдВ) рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
proc test() local x,y x=6 y=-x print y end_proc
рдкреНрд░рд╕рд╛рд░рдг рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ "рдкрддрди" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛! рдПрдХ рдЧрд┐рд░рд╛рд╡рдЯ y = -x рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧреАред рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ? рдПрдХ рд╢реВрдиреНрдп рдореЗрдВ! рдПрдХ infix рдлреЙрд░реНрдореВрд▓реЗ рд╕реЗ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реВрддреНрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдХрд┐ рдорд╛рдЗрдирд╕ "рджреЛ-рд╕рд╛рдордирд╛" - рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдорд╛рдЗрдирд╕ (рдПрдХ рдСрдкрд░реЗрд╢рди рд╕рдВрдХреЗрдд) рд╣реИ, рдФрд░ рдПрдХ рдЕрдирд╛рд░реНрдп рдорд╛рдЗрдирд╕ (рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд) рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд░реНрд╕рд░ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ - рдпрд╣ рд╕рднреА рд╡рд┐рдкрдХреНрд╖ рдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдорд╛рдирддрд╛ рд╣реИ ... рдЕрдм рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдХреЛрдб рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рднреА рдЕрдиреИрдЪреНрдЫрд┐рдХ рд╕рд╣рдорддрд┐ рдХреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдмрджрд▓ рджреЗрдВред рдХреИрд╕реЗ? рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд┐рд░реНрдорд╛рдг рдореЗрдВ "рдорд╛рдЗрдирд╕" рд░рд╣рддрд╛ рд╣реИ:
"(-Nechto"
"> -рд╕рдорд░реНрдерди"
"<-Nechto"
"= рдХреБрдЫ"
рдЦреИрд░, рд╕реВрддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╡рд╣ рднреА рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐, рдЯреЛрдХрди рдореЗрдВ рдЯреВрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рддреЗ рд╣реИрдВ:
"-Something" => "(0-рдХреБрдЫ"
"> -рд╕рдорд░реНрдерди" => "> 0-рдХреБрдЫ"
"<-Something" => "<0-something"
"= рдХреБрдЫ" => "= 0 рдХреБрдЫ"
рдФрд░ рдпрджрд┐ рд╕реВрддреНрд░ рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕реВрддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢реВрдиреНрдп рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рд╢реВрдиреНрдп рдмрд╛рдЗрдирд░реА рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рддреНрд░реБрдЯрд┐ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред рдЪрд▓рд┐рдП рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░реАрдкреНрд░реЛ рдирд╛рдо рд╕реЗ рдКрдкрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
(defun prepro (s) (let* ((s0 (if (eq "-" (strLeft s 1)) (strCat "0" s) s)) (s1 (strRep s0 "(-" "(0-")) (s2 (strRep s1 "=-" "=0-")) (s3 (strRep s2 ">-" ">0-")) (s4 (strRep s3 "<-" "<0-"))) s4))
рдпрд╣рд╛рдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рдПрдХ рдФрд░ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ рдЬреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреЛрд╣рд░реЗ рд╕рдВрдХреЗрддред рд╕реВрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╕рдВрдХреЗрдд ">" рдФрд░ "=" рдХрдВрдзреЗ рд╕реЗ рдХрдВрдзрд╛ рдорд┐рд▓рд╛рдХрд░ рдПрдХ рдСрдкрд░реЗрд╢рди "> =" (рдФрд░ рдПрдХ рдЯреЛрдХрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!)ред рдкрд╛рд░реНрд╕рд░ рдпрд╣ рдЬрд╛рдирдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ - рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдХреЗрдд рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЯреЛрдХрди рдмрдирд╛ рджреЗрдЧрд╛ред рдЖрдк рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдХрд░, рдФрд░ рдпрджрд┐ рд╕рдВрдпреЛрдЬрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдг рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ рдЬреЛ "рдкреЛрд╕реНрдЯрдкреНрд░реЛ" рдирд╛рдо рд╕реЗ рдпреВрдирд┐рдпрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:
(defun postpro (lex-list) (cond ((null (cdr lex-list)) lex-list) (t (let ((c1 (car lex-list)) (c2 (cadr lex-list))) (cond ((and (eq c1 ">") (eq c2 "=")) (cons ">=" (postpro (cddr lex-list)))) ((and (eq c1 "<") (eq c2 "=")) (cons "<=" (postpro (cddr lex-list)))) ((and (eq c1 "=") (eq c2 "=")) (cons "==" (postpro (cddr lex-list)))) ((and (eq c1 "<") (eq c2 ">")) (cons "<>" (postpro (cddr lex-list)))) ((and (eq c1 ">") (eq c2 "<")) (cons "<>" (postpro (cddr lex-list)))) ((and (eq c1 "!") (eq c2 "=")) (cons "/=" (postpro (cddr lex-list)))) ((and (eq c1 "/") (eq c2 "=")) (cons "/=" (postpro (cddr lex-list)))) (t (cons c1 (postpro (cdr lex-list)))))))))
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪреА рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
(defun mk-intf (txt) (let ((lex (postpro (parser (prepro txt) " ," "()+-*/\^=<>%"))) (intf "")) (iter (for a in lex) (setq intf (strCat intf a " "))) (try (input (strCat "(" intf ")")) except (progn (printsline (strCat "**** " (errormessage))) `(,txt) ))))
рдЕрдм рдЪрд▓реЛ inf2ipn рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдпрд╣ "рджреЛрд╖" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдХреЗ рдХреЛрд╖реНрдардХреЛрдВ рдХреЗ рдЕрд╕рдВрддреБрд▓рди рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдФрд░ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдСрдкрд░реЗрд╢рди рдпрд╛ рджреЛ рдСрдкрд░реЗрдВрдб рдХреЗ рд╕рдВрдХреЗрддред рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ inf2ipn рдХреЛрдб рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╣рдо рд╕реВрддреНрд░ рдХреЛ SCR рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ "рдкрдХрдбрд╝" рд▓реЗрддреЗ рд╣реИрдВред рдФрд░ рдЪрд▓реЛ (рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рд╣рдо рдЙрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдлрд╛рд░реНрдореВрд▓рд╛ рдХреЛ рдкреНрд░реАрдлрд┐рдХреНрд╕ рд╕реЗ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ i2p рд░реИрдкрд░ рдлрдВрдХреНрд╢рди рд╣реИред рдЕрдм рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
(defun i2p (f) (try (ipn2pref (inf2ipn f)) except (progn (printsline "**** ") (printsline (strCat "**** " (errormessage))) (setq *flagerr* t) nil)))
рдФрд░ рдЕрдм рд╣рдо рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдСрдкрд░реЗрд╢рди рд╕рдВрдХреЗрдд рдпрд╛ рджреЛ рдСрдкрд░реЗрдВрдб рдХреЗ рд╕реВрддреНрд░ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд░реЛрдХреЗрдВрдЧреЗред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдиреЗ рдПрдХ SCR рд╕реЗ рдПрдХ рд╕реВрддреНрд░ рдХреЛ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╣реА рд╕рдорд╛рдкрди рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рд╕реНрдЯреИрдХ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдЧрд▓рддреА рдХреА рдЧрдИ рд╣реИред рдФрд░ рдПрдХ рдФрд░ рдЧрд▓рдд рд╕реНрдерд┐рддрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЧрд▓рдд (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо) рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ "рдкрдХрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП":
(defun ipn2pref (f &optional (s nil)) (cond ((null f) (if (null (cdr s)) (car s) (progn (printsline "**** ") (setq *flagerr* t) nil))) ((numberp (car f)) (ipn2pref (cdr f) (cons (car f) s))) ((is-op (car f)) (let ((ar (arity (car f)))) (if (< (length s) ar) (progn (setq *flagerr* t) (printsline "**** ") nil) (ipn2pref (cdr f) (cons (cons (car f) (reverse (subseq s 0 ar))) (subseq s ar)))))) ((atom (car f)) (ipn2pref (cdr f) (cons (car f) s))) (t (ipn2pref (cdr f) (cons (list (car f) (car s)) (cdr s))))))
рдЕрдм рдЪрд▓реЛ рдЦрд░реАрдж рдХрдерди рд╣реИрдВрдбрд▓рд░ рдкрд░ рдПрдХ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк" рджреЗрдЦреЗрдВред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЛ рдЕрдВрдХ рдЪреВрдХ рдЧрдПред рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рднреВрд▓рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреА рд╕рдорддрд╛ (рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рддрджрдиреБрд╕рд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ * oplist * рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред рдФрд░ рджреВрд╕рд░рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕рд╣реА рдорд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ! рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЕрдВрддрд┐рдо рдлреЙрд░реНрдо рдХрд╛ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдХреА рд╡рд╛рдкрд╕реА рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд╛рд╕реНрдХрд▓ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдЪрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдм, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рд▓реМрдЯрд╛рдПрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдирд╛рдо рдкрд░рд┐рдгрд╛рдо рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдПрдХреНрд╢рди-рдЦрд░реАрдж рдлрдВрдХреНрд╢рди рд▓рд╛рддрд╛ рд╣реИ:
(defun action-proc (fi) (let ((stmt nil) (proc-name nil) (proc-parm nil) (loc-var nil) (lv '((result 0))) (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)) (setq *oplist* (cons (list proc-name (length proc-parm)) *oplist*))) ((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)) (if proc-name `(defun ,proc-name ,proc-parm (let ,lv ,@body result)) nil)))
рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рд░реБрдХреЗрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреЛрдб рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдирд╛ рд╣реЛрдЧрд╛; рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ ...) рдФрд░ рдЕрдм рд╣рдо рдЕрдкрдиреА рднрд╛рд╖рд╛ рдореЗрдВ рджреЛ рд╕реБрдзрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред
рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ ...
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдареАрдХ рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рднрд╛рд░реА рдмрдпрд╛рди рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЧреЗрдЯрд▓рд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрдврд╝реЗ рдЧрдП рдкрд╛рда рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдмрд╢рд░реНрддреЗ рдХрд┐ рдпрд╣ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ рдФрд░ "_" рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реЗрдЦрд╛ рддрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд╣рдо рдПрдХ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЪрд┐рдд рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рд╣реИ:
(defun getLine (fil) (let ((stri "") (res "")) (loop (when (filEof fil) (return "")) (setq *numline* (add1 *numline*)) (setq stri (filGetline fil)) (printsline (strCat (format *numline* "0000") " " (strRTrim stri))) (unless (or (eq "" stri) (eq "*" (strLeft stri 1))) (setq stri (strATrim stri)) (if (eq " _"(strRight stri 2)) (setq res (strCat res (strLeft stri (- (strLen stri) 2)))) (setq res (strCat res stri))) (unless (eq " _"(strRight stri 2)) (return res))))))
рдФрд░ рдЖрдЦрд┐рд░реА рд╕реБрдзрд╛рд░ред рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЖрдк рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдСрдкрд░реЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реВрдиреНрдп рдпрд╛ рдПрдХ рдХреА рдЧрдгрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдЗрд╕рд╕реЗ рднрд╛рд╖рд╛ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд┐рд▓рддреА рд╣реИ рдФрд░, рдореВрд▓ рднрд╛рд╡рдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рд╣рдорд╛рд░реЗ рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ рдореЗрдВ, рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
z=(x>y)*5+(x<=y)*10
рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рд▓рд┐рд╕реНрдк рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (> xy) рдХреА рдЧрдгрдирд╛ рдиреАрд▓ рдпрд╛ рдЯреА рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд▓ / рдЯреА рдХреЛ 5 рд╕реЗ рдЧреБрдгрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрд░реЗрд╢рд╛рдиреА рдорджрдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдЗрдП рдХреБрдЫ рд╕рд░рд▓ рдореИрдХреНрд░реЛрдЬрд╝ рд▓рд┐рдЦреЗрдВ рдЬреЛ рддреБрд▓рдирд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ 0/1 (рдиреАрд▓ / рдЯреА рдХреЗ рдмрдЬрд╛рдп) рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ:
(defmacro $= (xy) `(if (= ,x ,y) 1 0)) (defmacro $== (xy) `(if (= ,x ,y) 1 0)) (defmacro $> (xy) `(if (> ,x ,y) 1 0)) (defmacro $< (xy) `(if (< ,x ,y) 1 0)) (defmacro $/= (xy) `(if (/= ,x ,y) 1 0)) (defmacro $<> (xy) `(if (/= ,x ,y) 1 0)) (defmacro $<= (xy) `(if (<= ,x ,y) 1 0)) (defmacro $>= (xy) `(if (>= ,x ,y) 1 0))
рдЕрдм, ipn2pref рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИред рдпрд╣рд╛рдБ рд▓рд╛рдЗрди рд╣реИ:
(ipn2pref (cdr f) (cons (cons (car f) (reverse (subseq s 0 ar))) (subseq s ar)))
рдпрд╣рд╛рдВ (рдХрд╛рд░ f) рдСрдкрд░реЗрд╢рди рдХрд╛ рдирд╛рдо рд╣реИред рддреБрд▓рдирд╛ рдХреЛрдб рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВ:
(defun chng-comp (op) (if (member op '(= == /= <> > < >= <=)) (implode (cons '$ (explode op))) op))
рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рддрд░реНрдХ рдПрдХ рддреБрд▓рдирд╛рддреНрдордХ рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ "$" рдЪрд░рд┐рддреНрд░ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдм рдЗрд╕реЗ ipn2pref рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ:
(ipn2pref (cdr f) (cons (cons (chng-comp (car f)) (reverse (subseq s 0 ar))) (subseq s ar)))
рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рддреБрд▓рдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ:
proc test() local x,y x=1 y=2 result=(x>y)*5+(x<=y)*10 end_proc
рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдХреЛрдб
рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд
рд╣реИредрдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПред