рдЖрдЗрдП рд▓рд┐рд╕реНрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ... рдПрдХ рд╕рд░рд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рджрдХред рдирд╣реАрдВ, рдирд╣реАрдВ, рдореБрдЭрд╕реЗ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реБрдИ - рдпрд╣ рдЕрдиреБрд╡рд╛рджрдХ рд╣реИред рдЗрд╕реЗ рд▓рд┐рд╕реНрдк рдХреЛрдб рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдлрд┐рд░ рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рд╕реНрдк рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ, рдЕрдирдореЛрд▓ рд╕реЗрд╡рд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА рдХрд┐ рд▓рд┐рд╕реНрдк рдореЗрдВ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╣ "рд╣реЛрдореЛ-рдкрд╣рдЪрд╛рди" рдирд╛рдордХ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рдПрдХ рджреБрд░реНрд▓рдн рд╕рдВрдкрддреНрддрд┐ рд╣реИ)ред рд▓реЗрдХрд┐рди рд▓рд┐рд╕реНрдк рдХреА рджреГрд╢реНрдп рдХреНрд╖рдорддрд╛рдПрдВ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдВрдЧреАред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ HomeLisp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ ред рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреЙрдорди рд▓рд┐рд╕реНрдк рдореЗрдВ рдврд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ - рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреЙрдорди рд▓рд┐рд╕реНрдк рдФрд░ рд╣реЛрдо рд▓рд┐рд╕реНрдк рдХреЗ рдмреАрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдХреЗрд╡рд▓ рд▓рд╛рдЗрдиреЛрдВ рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИред
рдпрд╣рд╛рдВ HomeLisp рдХрд╛ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред рдкреНрд░рд▓реЗрдЦрди рднреА рдЙрд╕реА рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдЦ рд╕реЗ рдХреЛрдб рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╖рдп рдкреНрд░рд╕рд┐рджреНрдз рдиреЛрд╡реЛрд╕рд┐рдмрд┐рд░реНрд╕реНрдХ LSHUP-2018 рдореЗрдВ рдореЗрд░реА рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛ред рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рд▓рд┐рд╕реНрдк рднрд╛рд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред
рдиреАрдЪреЗ рдЙрддрд░рдирд╛
рдЖрдЗрдП рд╣рдо "рд╕рд░рд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛" рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рд▓рд┐рд╕реНрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рднрд╛рд╖рд╛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдЧреАред рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реЛрддреЗ рд╣реИрдВ (рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ)ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ, рдПрдХ рдХреЛ рдореБрдЦреНрдп рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣реИ рдХрд┐ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдмрд╛рдВрдзреЗрдВ? рд╣рдо рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рд▓рд┐рд╕реНрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рд╕реНрдк рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЦреБрдж рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ ...
рднрд╛рд╖рд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ: рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ, рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ, рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЪрдХреНрд░, рдЪрдХреНрд░ рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рдХрд╛рд╕, рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ (рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо) рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЗрди рдХреА рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред рдмреЗрд╢рдХ, рднрд╛рд╖рд╛ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ - рдХреНрд░рдорд┐рдХ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдореБрджреНрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдирдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛:
proc main() local s,n,k input n for i=1 to n k=2*i-1 print k s=s+k end_for print s end_proc
рдЗрд╕рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ, рдпрд╣ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рддрд░рд╣ рдХреА рднрд╛рд╖рд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ "рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ" рдХрд╣реВрдВрдЧрд╛ред рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рд╕реНрдк рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
(defun main nil (let ((s 0) (n 0) (k 0)) (setq n (read)) (iter (for i from 1 to n) (setq k (- (* 2 i) 1)) (printline k) (setq s (+ sk))) (printline s)))
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдкреИрдХреЗрдЬ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдкреЗрд╢реЗрд╡рд░ рдХреЙрдорди рд▓рд┐рд╕реНрдк рдкреИрдХреЗрдЬ рдореЗрдВ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЛрдо рд▓рд┐рд╕реНрдк рдореЗрдВ, рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрдЯреЗрд░ рдлрд╝рдВрдХреНрд╢рди (рдЬреЛ рдореИрдХреНрд░реЛ рдЗрдЯрд░реЗрдЯ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рднрд╛рдЧ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ) рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╡реНрдпрд╕рди рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ "рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ" рдХреЗ рдЪрдХреНрд░реЛрдВ рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ? рдкреНрд░рд╕рд╛рд░рдг рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЗрди рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рдкрдврд╝рдирд╛ред рд╣рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╢реБрд░реВ рд╕реЗ рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдиреЗ рджреЗрдВред рдпрд╣рд╛рдБ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
(defun start (&optional (fname nil)) (setq *numline* 0) (setq *flagerr* nil) (when (null fname) (setq fname (sysGetOpenName (sysHome) "-|*.mbs"))) (let ((fi (gensym 'fi))) (when fname (filOpen fi fname _INPUT) (loop (getLine fi) (when (or *flagerr* (filEOF fi)) (return t))) (filClose fi) (when *flagerr* (printsline "**** ")))) (unset '*numline*) (unset '*flagerr*))
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ fname рд╣реИ - рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп, рджреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд╕реБрд▓рд╛рдЗрди, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреА рд▓рд╛рдЗрди рд╕рдВрдЦреНрдпрд╛, рдФрд░ рдлреНрд▓реИрдЧрд░ , рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдзреНрд╡рдЬред рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпреЗ рдЪрд░ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рд╣реЛрдордкреНрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдЕрдирд╕реЗрдЯ рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ)ред
рдпрджрд┐ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡рд┐рдВрдбреЛрдЬрд╝-рдбрд╛рдпрд▓реЙрдЧ (sysGetOpenName) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (sysHome) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд░рдВрдн рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдлрд╝рд╛рдЗрд▓ рдореИрдирд┐рдкреНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╡рд░реНрдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдкрд╛рда рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░, рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрди ( рдЧреЗрдЯрд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди) рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ рдФрд░ рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрдд рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрдд рддрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪрдХреНрд░ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ, рддреЛ рдПрдХ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдирд╛ getLine рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
(defun getLine (fil) (let ((stri "")) (loop (when (filEof fil) (return "")) (setq *numline* (add1 *numline*)) (setq stri (filGetline fil)) (printsline (strCat (format *numline* "0000") " " (strRTrim stri))) (setq stri (strATrim stri)) (unless (or (eq "" stri) (eq "*" (strLeft stri 1))) (return stri)))))
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:
- рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрдд рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓реВрдк рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
- рд░реАрдб рд▓рд╛рдЗрдиреНрд╕ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рдПрдХ рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ;
- рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ;
- рд░реАрдб рд▓рд╛рдЗрди рджрд╛рдИрдВ рдУрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдореБрджреНрд░рд┐рдд рд╣реЛрддреА рд╣реИ;
- рдпрджрд┐ рдкрдарди рд░реЗрдЦрд╛ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╣реИ
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдЯрд░реНрди;
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рднреА рд▓рд╛рдЗрдиреЗрдВ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдЖрддреА рд╣реИрдВред
рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ
рдЕрдм рдЗрдирдкреБрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджрд░реНрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЯреЛрдХрди (рдЕрд╡рд┐рднрд╛рдЬреНрдп рдЗрдирдкреБрдЯ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдЗрдХрд╛рдЗрдпреЛрдВ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╣рдореЗрдВ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╛рд░реНрд╕рд░реНрд╕ рд▓рд┐рдЦрдирд╛ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд┐рд╖рдп рд╣реИ, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкрд╛рд░реНрд╕рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдкрд╛рд░реНрд╕рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ ... рд╣рдо рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред
рдкрд╛рд░реНрд╕рд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ рджреЛ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рд╕рд╛рдзрд╛рд░рдг рдкрд╛рддреНрд░;
- рд╡рд┐рднрд╛рдЬрдХ рд╡рд░реНрдгред
рддреЛ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ "x = 15 + y ^ 2" рдореЗрдВ, рд╡рд░реНрдг x, 1,5, y рдФрд░ 2 рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдг рд╣реИрдВ, рдФрд░ рд╡рд░реНрдг "рд╕реНрдкреЗрд╕" , + , ^ рд╕реАрдорд╛рдВрдХрдХ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░рд┐рддреНрд░ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ? рд╡рд┐рднрд╛рдЬрдХ - рд╣рдореЗрд╢рд╛ рдПрдХ рдЯреЛрдХрди рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░, рдЯреЛрдХрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: "x", "=", "15", "y", "^", "2" ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рд╕реАрдорд╛рдВрдХрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ (рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЧрд┐рд░ рдирд╣реАрдВ)ред рд╣рдо рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╡рд┐рднрд╛рдЬрдХреЛрдВ рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЗрдирдкреБрдЯ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдЧрд╛, рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдмреИрдЯрд░реАред рдмреИрдЯрд░реА рдореЗрдВ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╣рдо рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдЪрд░рд┐рддреНрд░ рдкрдврд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдЪрд░рд┐рддреНрд░ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдмреИрдЯрд░реА рд╕реЗ рдорд┐рд▓рд╛рдПрдВред рдпрджрд┐ рдПрдХ рд╕реАрдорд╛рдВрдХрдХ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ:
- рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪреА рдореЗрдВ рдмреИрдЯрд░реА рдорд╛рди (рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ) рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреИрдЯрд░реА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ;
- рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪреА рдореЗрдВ рдЧреИрд░-рдЦрд╛рд▓реА рдмреИрдЯрд░реА рдХреЗ рдореВрд▓реНрдп рдХреЛ рднреА рдбрдВрдк рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪреА рдореЗрдВ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрд╡реАрдХреГрдд рд╡рд┐рднрд╛рдЬрдХ (рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдмреИрдЯрд░реА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдкрд╛рд░реНрд╕рд░ рдХреЛрдб рд╣реИ:
(defun parser (txt &optional (d1 " ,") (d2 "()+-*/\^=<>%")) (let ((res nil) (lex "") ) (iter (for s in-string (strCat txt (strLeft d1 1))) (cond ((plusp (strInd d1 s)) (when (> (strLen lex) 0) (collecting lex into res)) (setq lex "")) ((plusp (strInd d2 s)) (when (> (strLen lex) 0) (collecting lex into res)) (collecting s into res) (setq lex "")) (t (setq lex (strCat lex s))))) res))
рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ: d1 рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдореЗрдВ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рднрд╛рдЬрдХ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд▓рд╛рдЗрди d2 рдореЗрдВ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрдХ рд╣реЛрддреЗ рд╣реИрдВред
рдкрд╛рд░реНрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдХреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХреЛ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмреИрдЯрд░реА рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдВрд╕рд╛рдзрд┐рдд рдЯреЛрдХрди "рд╣реИрдВрдЧ" рд╣реЛ (рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ рд▓реЗрдХреНрд╕ рдмреИрдЯрд░реА рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИ)ред
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдкрд╛рд░реНрд╕рд░ "рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ" рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
(parser "x = 15 + y^2") ==> ("x" "=" "15" "+" "y" "^" "2")
рдпрд╣ рд╕рд╣реА рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд▓рд┐рд╕реНрдк рдирд╣реАрдВ рд╣реИред рдЪрд▓реЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕реВрдЪреА рд╕реЗ рдкрд░рдорд╛рдгреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ... рдЬреЛ рд╕рднреА рдЯреЛрдХрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рд▓рдВрдмреА рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЯреЛрдХрди рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд╛рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ), рдлрд┐рд░ рдЗрд╕ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмреНрд░реИрдХреЗрдЯ рдХреЛ рдЪрд┐рдкрдХрд╛ рджреЗрддрд╛ рд╣реИ, рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ ... рдФрд░ рдлрд┐рд░ рд▓рд┐рд╕реНрдк рдХреЛ рд╕реВрдЪреА рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ:
(defun mk-intf (txt) (let ((lex (parser txt " ," "()+-*/\^=<>%")) (intf "")) (iter (for a in lex) (setq intf (strCat intf a " "))) (input (strCat "(" intf ")"))))
рдЕрдм, рдпрджрд┐ рд╣рдо mk-intf рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:
(mk-intf "x = 15 + y^2") ==> (X = 15 + Y ^ 2)
рдЬреЛ, рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЕрдм рдЪрд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯ рдлрдВрдХреНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВ: рдЗрд╕ рдлрдВрдХреНрд╢рди рдХреЛ рдкреВрд░рд╛ рдкреНрд░реЛрд╕реЗрд╕ рдкрдврд╝рдирд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
(defun start (&optional (fname nil)) (setq *numline* 0) (setq *flagerr* nil) (when (null fname) (setq fname (sysGetOpenName (sysHome) "-|*.mbs"))) (when fname (let ((fi (gensym 'fi))) (filOpen fi fname _INPUT) (loop (let ((curr-proc (action-proc fi))) (when (or *flagerr* (filEOF fi)) (return t)) (eval curr-proc))) (filClose fi)) (when *flagerr* (printsline "**** "))) (unset '*numline*) (unset '*flagerr*))
рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рдПрдХреНрд╢рди-рдкреНрд░реЛрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓рд┐рд╕реНрдк рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡реАрдХреГрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдХреЛ, рд╡рдХреНрд░-рдЦрд░реАрдж рдЪрд░ рдореЗрдВ рдПрд╕-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдирд┐рд╖реНрдХрд╛рд╕рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╕реНрд╡реАрдХреГрдд рдХрд╛рд░реНрдп рд▓рд┐рд╕реНрдк рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ "рдкреБрдирд░реНрдЬрдиреНрдо" рд╣реИ!
рдХрд╛рд░реНрд░рд╡рд╛рдИ-рдЦрд░реАрдж рдХреНрдпрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЗрди рдкрдврд╝рддрд╛ рд╣реИ, рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдмрд╛рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕реВрдЪреА рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ "рд╕реАрдЦреЗрдВрдЧреЗ" рдПрдХреНрд╢рди-рдкреНрд░реЛрдХ рдЬреЗрдирд░реЗрд╢рдиред рдФрд░ рдЪрд▓реЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рдПрдХ рдорд┐рдиреА-рдмреЗрд╕рд┐рдХ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ:
proc name(p1,p2,p3)
рдЗрд╕ рддрд░рд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
(mk-intf "proc name(p1,p2,p3)") ==> (PROC NAME (P1 P2 P3))
рдЗрд╕ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХреНрд╢рди-рдкреНрд░реЛрдХ рдлрдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╕реВрдЪреА рдХрд╛ рдкреНрд░рдореБрдЦ рдПрдХ PROC рдкрд░рдорд╛рдгреБ рд╣реИ, рдЖрдкрдХреЛ рд╕реВрдЪреА рдХреЗ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдФрд░ рддреАрд╕рд░реЗ рддрддреНрд╡ рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдирд╛рдо рдФрд░ рд╕реВрдЪреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм end_proc рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдХреЗ рдирд╛рдо рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдХрд╛рдп (рдЕрдм рддрдХ) рдХреЗ рд╕рд╛рде рдПрдХ рдбреАрдлрд╝рди рдлрд╝реЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
(defun action-proc (fi) (let ((stmt nil) (proc-name nil) (proc-parm 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)) (t (printsline (strCat "**** " (output stmt) " ")) (setq *flagerr* t)))) `(defun ,proc-name ,proc-parm (quote OK))))
рдбрд┐рдлреЙрди рдХреНрд▓реЙрдЬ рдХреЗ рдЕрдВрддрд┐рдо рдЧрдарди рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рд╡рд░реНрд╕ рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрддреНрдкрдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдареАрдХ рдкрд░рдорд╛рдгреБ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреАред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рдХреЛрдб рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 0000.mbs рдкрд░ рд░рдЦреЗрдВ:
proc f1(x,y) end_proc proc f2(x) end_proc
рдкреНрд░рд╛рд░рдВрдн рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдПрдБ, 0000.mbs рдЪреБрдиреЗрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рджреЗрдЦреЗрдВ:
0001 proc f1(x,y) 0002 end_proc 0003 proc f2(x) 0004 end_proc
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рд╕реНрдк рдорд╢реАрди рдореЗрдВ рдЕрдм рджреЛ (рдЕрдм рддрдХ рдмреЗрдХрд╛рд░) рдХрд╛рд░реНрдп f1 рдФрд░ f2 рд╣реИрдВ :
(getd 'f1) ==> (EXPR (XY) (QUOTE OK)) (getd 'f2) ==> (EXPR (X) (QUOTE OK))
рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ! рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
(f1 1 2) ==> OK (f2 2) ==> OK
рд╣рдорд╛рд░реЗ рдЕрдиреБрд╡рд╛рджрдХ рдиреЗ рдкрд╣рд▓реА рд╕рд╛рдВрд╕ рд▓реА ...
рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░
рдЕрдм рд╣рдорд╛рд░реЗ рдирд╡рдЬрд╛рдд рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рд╕рд┐рдЦрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ , рдкреНрд░рд┐рдВрдЯ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВред
рдЗрдирдкреБрдЯ рдФрд░ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ред рджреЛрдиреЛрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рдВрд░рдЪрдирд╛ рд╣реИ: рдХреАрд╡рд░реНрдб рдФрд░ рдЪрд░ред рдСрдкрд░реЗрдЯрд░ рдЗрдирдкреБрдЯ x рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рд┐рд╕реНрдк рдлреЙрд░реНрдо (рд╕реЗрдЯ рдПрдХреНрд╕ (рд░реАрдб)) рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рд┐рдВрдЯ рдПрдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдПрдХ рдлреЙрд░реНрдо (рдкреНрд░рд┐рдВрдЯрд▓рд╛рдЗрди рдПрдХреНрд╕) рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд░реВрдкреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ-рдЦрд░реАрдж рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдирд┐рдХрд╛рдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЪрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рд░реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░реВрдкреЛрдВ рдХреЛ рдЬрдорд╛ рдХрд░реЗрдЧрд╛ред рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:
(defun action-proc (fi) (let ((stmt nil) (proc-name nil) (proc-parm nil) (loc-var 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) ))))) (t (printsline (strCat "**** " (output stmt) " ")) (setq *flagerr* t)))) `(defun ,proc-name ,proc-parm ,@body)))
рдЕрдм рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдорд┐рдиреА рдмреЗрд╕рд┐рдХ рдкрд░ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
proc f1(x,y) print x print y end_proc proc f2(x) input x print x end_proc
рдФрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ... рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд▓рд┐рд╕реНрдк рдлрд╝рдВрдХреНрд╢рди рдПрдл 1 рдФрд░ рдПрдл 2 рд╣реЛрдВрдЧреЗ ред рдЖрдЗрдП рдЙрдирдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рднрд╛рд╡реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдП рд╣реИрдВ:
(getd 'f1) ==> (EXPR (XY) (PRINTLINE X) (PRINTLINE Y)) (getd 'f2) ==> (EXPR (X) (SETQ X (READ)) (PRINTLINE X))
рдЖрдк рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдЪрд░ рдореЗрдВ рдорд╛рди рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ ... рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдиреАрдп рдСрдкрд░реЗрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд╛рдиреАрдп рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЪрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрдиреЗ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред End_proc рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж , рдЖрдкрдХреЛ рд▓реЗрдЯ рдлреЙрд░реНрдо рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдПрдХреНрдЬреАрдХреНрдпреВрдЯреЗрдмрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдФрд░ рдкреНрд░рд┐рдВрдЯ ) рдХреЛ " рдПрдирдХреНрд▓реЛрдЬ " рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдПрдХреНрд╢рди-рдкреНрд░реЛрдХреНрдпреЛрд░ рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
(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)))) (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))))
рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рд╕реВрдЪреА рд▓реЛрдХ- рдЪрд░ рдЪрд░ рдореЗрдВ рдЬрдорд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдкреНрд░рдкрддреНрд░ (рдирд╛рдо 0) рдХреЗ рдЬреЛрдбрд╝реЗ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЗрд╕реА рд╕рдордп, рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХрд╛ рджреЛрд╣рд░рд╛рд╡ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ ... рдЗрд╕реЗ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдП? рдмреЗрд╢рдХ, рд╕реНрдерд╛рдиреАрдп рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЬрд╛рдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╛рдо рд╣реИрдВ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдВ)ред рд▓реЗрдХрд┐рди, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рдЬреЛ рдХрд┐ рд╕реЗрдЯрдСрдл рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ ред рдЕрдм рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдФрд░ рд░рди рдХрд░рддреЗ рд╣реИрдВ:
proc f1(x,y) local a,b,c print x print y input a print a end_proc
рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрддрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЖрдЧреЗ рд╣реИ!
рдпрд╣рд╛рдВ рд╕реЗ рдЖрдк рдЬреЛ рд╣рдо рд╣реИрдВ рдЙрд╕рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ w рдХреЛрдбрд┐рдд ...
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП!