{"id":289569,"date":"2018-09-18T16:40:02","date_gmt":"2018-09-18T12:40:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=289569"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=289569","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u043d\u0430 \u041b\u0438\u0441\u043f\u0435 \u2014 III"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><a href=\"https:\/\/habr.com\/post\/421445\/\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a><\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0438, \u041e\u0448\u0438\u0431\u043a\u0438, \u041e\u0448\u0438\u0431\u043a\u0438\u2026<\/h3>\n<p>  \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u042d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0441\u0441\u043f\u043e\u0440\u043d\u043e. \u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0430 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 \u2013 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0442\u044c (\u043f\u0440\u043e\u0444\u0438\u043b\u0430\u043a\u0442\u0438\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u043b\u0435\u0447\u0435\u043d\u0438\u044f!). \u0412\u044b\u0441\u0448\u0438\u0439 \u043f\u0438\u043b\u043e\u0442\u0430\u0436 \u2013 \u0442\u0430\u043a \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043c\u043e\u0433 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443. <\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442, \u0438, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043d\u0435\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u0432\u043e\u0434. \u041d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0432\u0432\u043e\u0434 \u043d\u0435\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432!<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0443, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u043e\u0442\u0441\u0435\u0447\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435\u201d, \u0437\u0430\u0434\u0430\u0432 \u043c\u0430\u0441\u043a\u0443 \u0432\u0432\u043e\u0434\u0430. <\/p>\n<p>  \u0427\u0435\u043b\u043e\u0432\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044e \u043e\u0448\u0438\u0431\u0430\u0442\u044c\u0441\u044f, \u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0432\u043e\u0434\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u044f\u0437\u044b\u043a\u0430, \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043d\u044f\u0442\u043d\u0443\u044e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0443 \u0438, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u201c\u043f\u043e \u043e\u0434\u043d\u043e\u0439\u201d. \u0418 \u0443\u0436 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u201c\u043f\u0430\u0434\u0430\u0435\u0442\u201d \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.<br \/>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u0440\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u043d\u0435\u0435 \u043a\u043e\u0434\u0443 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c (\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c) \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 start. \u0427\u0442\u043e \u043e\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442? \u041e\u043d\u0430 \u0431\u0435\u0440\u0435\u0442 \u0438\u043c\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0437\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0443\u0436\u0435 \u201c\u0443\u0441\u0442\u043e\u044f\u043b\u0441\u044f\u201d \u2013 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c:<\/p>\n<ul>\n<li> \u0415\u0441\u043b\u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u2013 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u201c\u041epen\u201d;<\/li>\n<li> \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u043e\u0442\u043a\u0430\u0437\u201d \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u201cOpen\u201d \u2013 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443;<\/li>\n<li> \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0444\u0430\u0439\u043b \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\/\u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2013 \u0432\u044b\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443;<\/li>\n<li> \u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2013 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0435\u0433\u043e.<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0448\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b start \u044d\u0442\u043e\u043c\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442. \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"lisp\">(defun start (&amp;optional (fname \"\"))    (setq *numline* 0)    (setq *flagerr* nil)    (setq *oplist* \u2026) ;; \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0443\u0449\u0435\u043d \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043c\u0435\u0441\u0442\u0430    (when (zerop (strLen fname))          (setq fname (sysGetOpenName (sysHome) \"\u041c\u0438\u043d\u0438-\u0431\u044d\u0439\u0441\u0438\u043a|*.mbs\")))    (let ((fi (gensym 'fi)))         (filOpen fi fname _INPUT)         (loop             (let ((curr-proc (action-proc fi)))                  (when *flagerr* (return t))                  (when (filEOF fi) (return t))                  (eval curr-proc)))         (filClose fi))         (when *flagerr* (printsline \"**** \u0411\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438\"))) <\/code><\/pre>\n<p>  \u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u00ab\u043e\u0442\u043a\u0430\u0437\u00bb \u2013 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u201c\u0443\u043f\u0430\u0434\u0435\u0442\u201d. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e\u0439 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043d\u0435 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043c\u0438\u043d\u0438-\u0431\u044d\u0439\u0441\u0438\u043a\u0430 \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0446\u0438\u043a\u043b \u0440\u0430\u0437\u043e\u0440\u0432\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 \u0441\u0440\u0435\u0434\u0443 \u041b\u0438\u0441\u043f\u0430.<\/p>\n<p>  \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u0438 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<\/p>\n<pre><code class=\"lisp\">(defun start (&amp;optional (fname \"\"))    (setq *numline* 0)    (setq *flagerr* nil)    (setq *oplist* \u2026 )    (when (zerop (strLen fname))          (setq fname (sysGetOpenName (sysHome) \"\u041c\u0438\u043d\u0438-\u0431\u044d\u0439\u0441\u0438\u043a|*.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 \"**** \u0411\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438\")))         (printsline (if fname                          (strCat \"**** \u0424\u0430\u0439\u043b \" fname \" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\")                          \"**** \u041e\u043f\u0443\u0449\u0435\u043d\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430\")))     (unset '*numline*)              (unset '*flagerr*)     (unset '*oplist*)) <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u0434\u0430\u043d\u043e \u0438 \u0444\u0430\u0439\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439: \u201c\u0424\u0430\u0439\u043b \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\u201d \u0438\u043b\u0438 \u201c\u041e\u043f\u0443\u0449\u0435\u043d\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430\u201d.<br \/>  \u0412 \u0442\u0435\u043b\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ul>\n<li>\u041e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f action-proc. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 curr-proc;<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 *flagerr* \u043f\u043e\u0434\u043d\u044f\u0442, \u0446\u0438\u043a\u043b \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f;<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f action-proc \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2013 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u0440\u0435\u0434\u0443 \u041b\u0438\u0441\u043f\u0430;<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430, \u0446\u0438\u043a\u043b \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/li>\n<\/ul>\n<p>  \u041a\u043e\u0434 \u0441\u0442\u0430\u043b, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e, \u043b\u0443\u0447\u0448\u0435\u2026 \u041d\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043d\u0435\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c \u2013 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f, \u043d\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u2013 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u0431\u044b \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u044f\u0432\u0438\u0442\u044c.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0447\u0451\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0432\u0435\u0434\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u201c\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0448\u0438\u0431\u043e\u043a\u201d, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c. \u0410 \u0444\u043b\u0430\u0433 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b:<\/p>\n<pre><code class=\"lisp\">(defun start (&amp;optional (fname \"\"))    (setq *numline* 0)    (setq *flagerr* nil)    (setq *errcount* 0)    (setq *oplist* \u2026)     (when (zerop (strLen fname))          (setq fname (sysGetOpenName (sysHome) \"\u041c\u0438\u043d\u0438-\u0431\u044d\u0439\u0441\u0438\u043a|*.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 (&gt; *errcount* 0) (printsline \"**** \u0411\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438\")))         (printsline (if fname (strCat \"**** \u0424\u0430\u0439\u043b \" fname \" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\") \"**** \u041e\u043f\u0443\u0449\u0435\u043d\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430\")))     (unset '*numline*)              (unset '*flagerr*)     (unset '*oplist*)     (unset '*errcount*)) <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f start \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u044d\u0442\u043e\u043c \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>* * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 * proc test1(x)  local y  y=x^2  bla-bla end_proc * * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438 * proc test2()   local x,y   input x   y=test1(x)   print y end_proc * * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 * proc test3(x)   bla-bla-bla   print x end_proc <\/code><\/pre>\n<p>  \u0418 \u201c\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e\u201d \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0448 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440. \u041f\u043e\u043b\u0443\u0447\u0438\u043c:<\/p>\n<pre><code>0001 * 0002 * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 0003 * 0004 proc test1(x) 0005  local y 0006  y=x^2 0007  bla-bla **** \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (BLA - BLA) \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d 0008 end_proc 0009 * 0010 * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438 0011 * 0012 proc test2() 0013   local x,y 0014   input x 0015   y=test1(x) 0016   print y 0017 end_proc 0018 * 0019 * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 0020 * 0021 proc test3(x) 0022   bla-bla-bla **** \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (BLA - BLA - BLA) \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d 0023   print x 0024 end_proc 0025  **** \u0411\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438 <\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 start \u043c\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c. \u041d\u043e \u201c\u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438\u201d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c. \u041f\u0440\u0438\u0433\u043b\u044f\u0434\u0438\u043c\u0441\u044f \u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438. <\/p>\n<p>  \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0430\u043c\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043b\u044e\u0434\u0438 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u2013 \u044d\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 (\u043d\u0435\u0441\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438). \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043c\u0438\u043d\u0438-\u0431\u044d\u0439\u0441\u0438\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f. \u0421\u0442\u0440\u043e\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f (\u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u0435\u043a\u0441\u0435\u043c\u044b), \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043b\u0435\u043a\u0441\u0435\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u043f\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443. \u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u043b\u0435\u043a\u0441\u0435\u043c \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043b\u0435\u043a\u0441\u0435\u043c\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0441\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043d\u043e \u0432\u0435\u0434\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043b\u0435\u043a\u0441\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0445\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 input, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u043e\u043a \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u041b\u0438\u0441\u043f\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 input \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. <\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c.<\/p>\n<p>  \u0412 HomeLisp \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u043b\u0443\u0436\u0438\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f (try \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435-1 except \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435-1). \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435-1. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u0430 \u2013 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0439 \u0444\u043e\u0440\u043c\u044b try;<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435-2. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (errormessage), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.<\/li>\n<\/ul>\n<p>  \u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u0441\u043f\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lisp\">(defun mk-intf (txt)   (let ((lex (parser txt \" ,\" \"()+-*\/\\^=&lt;&gt;%\"))         (intf \"\"))    (iter (for a in lex) (setq intf (strCat intf a \" \")))    (try          (input (strCat \"(\" intf \")\"))     except         (progn             (printsline (strCat \"**** \" (errormessage)))            `(,txt) )))) <\/code><\/pre>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0430\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u2013 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0434\u0430. \u0414\u0430\u043b\u0435\u0435 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043f\u0430\u0434\u0435\u0442 (\u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440) \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 action-proc. \u0418, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u042d\u0442\u043e \u043f\u043e\u0440\u043e\u0434\u0438\u0442 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0435\u0433\u043e \u043f\u0440\u043e\u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code>* * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 * proc test1(x)  local y  y=(x^2)) end_proc * * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438 * proc test2()   local x,y   input x   y=test1(x)   print y end_proc * * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 * proc test3(x)   x=3+)x^2    print x end_proc <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>0001 * 0002 * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 0003 * 0004 proc test1(x) 0005  local y 0006  y=(x^2)) **** \u041d\u0430\u0440\u0443\u0448\u0435\u043d \u0431\u0430\u043b\u0430\u043d\u0441 \u0441\u043a\u043e\u0431\u043e\u043a \u0438\u043b\u0438 \u043d\u0435\u0432\u0435\u0440\u043d\u0430 \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 **** \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (\"y=(x^2))\") \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d 0007 end_proc 0008 * 0009 * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438 0010 * 0011 proc test2() 0012   local x,y 0013   input x 0014   y=test1(x) 0015   print y 0016 end_proc 0017 * 0018 * \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 0019 * 0020 proc test3(x) 0021   x=3+)x^2 **** \u041d\u0430\u0440\u0443\u0448\u0435\u043d \u0431\u0430\u043b\u0430\u043d\u0441 \u0441\u043a\u043e\u0431\u043e\u043a \u0438\u043b\u0438 \u043d\u0435\u0432\u0435\u0440\u043d\u0430 \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 **** \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 (\"x=3+)x^2\") \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d 0022   print x 0023 end_proc **** \u0411\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438 <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u043d\u0430 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432, \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u0443 \u043e\u043f\u043b\u043e\u0448\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0432\u0438\u043d\u043d\u044b\u0439 (\u0441 \u0432\u0438\u0434\u0443) \u043a\u043e\u0434:<\/p>\n<pre><code>proc test()   local x,y   x=6   y=-x   print y end_proc <\/code><\/pre>\n<p>  \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u201c\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c\u201d \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430! \u041f\u0430\u0434\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 y=-x. \u0412 \u0447\u0435\u043c \u0436\u0435 \u0434\u0435\u043b\u043e? \u0412 \u0443\u043d\u0430\u0440\u043d\u043e\u043c \u043c\u0438\u043d\u0443\u0441\u0435! \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0438\u0437 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u0443\u044e, \u043c\u044b \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0438\u043d\u0443\u0441 \u201c\u0434\u0432\u0443\u043b\u0438\u043a\u201d \u2013 \u0431\u044b\u0432\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 (\u0437\u043d\u0430\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438), \u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0443\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 (\u0437\u043d\u0430\u043a \u0447\u0438\u0441\u043b\u0430). \u041d\u0430\u0448 \u043f\u0430\u0440\u0441\u0435\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u2013 \u043e\u043d \u0432\u0441\u0435 \u043c\u0438\u043d\u0443\u0441\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c\u0438\u2026 \u0427\u0442\u043e \u0436\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u043b\u0430\u0442\u044c? \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0443\u0448\u0438\u0442\u044c \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0432\u0441\u0435 \u0443\u043d\u0430\u0440\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435. \u041a\u0430\u043a? \u0410 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u0435\u0434\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u043d\u0430\u0440\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u201c\u0436\u0438\u0432\u0435\u0442\u201d \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445:<\/p>\n<p>  \u201c(-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u201c&gt;-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u201c&lt;-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u201c=-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u043d\u0443, \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043e\u043d \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u043e\u0439 \u043d\u0430 \u043b\u0435\u043a\u0441\u0435\u043c\u044b \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043c\u0435\u043d\u044b:<\/p>\n<p>  \u201c(-\u043d\u0435\u0447\u0442\u043e\u201d =&gt; \u201c(0-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u201c&gt;-\u043d\u0435\u0447\u0442\u043e\u201d =&gt; \u201c&gt;0-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u201c&lt;-\u043d\u0435\u0447\u0442\u043e\u201d =&gt; \u201c&lt;0-\u043d\u0435\u0447\u0442\u043e\u201d<br \/>  \u201c=-\u043d\u0435\u0447\u0442\u043e\u201d =&gt; \u201c=0-\u043d\u0435\u0447\u0442\u043e\u201d<\/p>\n<p>  \u0430 \u0435\u0441\u043b\u0438 \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0438\u043d\u0443\u0441\u0430, \u043f\u0440\u0438\u043f\u0438\u0448\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043d\u0443\u043b\u044c, \u0442\u043e \u0432\u0441\u0435 \u043c\u0438\u043d\u0443\u0441\u044b \u0441\u0442\u0430\u043d\u0443\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c\u0438 \u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0430 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0438\u043c\u0435\u043d\u0435\u043c \u201cprepro\u201d. \u0412\u043e\u0442 \u043a\u0430\u043a \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c:<\/p>\n<pre><code class=\"lisp\">(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 \"&gt;-\" \"&gt;0-\"))          (s4 (strRep s3 \"&lt;-\" \"&lt;0-\")))     s4)) <\/code><\/pre>\n<p>  \u041e\u0441\u043e\u0431\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u041d\u043e \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043d\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0431\u0435\u0434\u0430 \u2013 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u0437\u043d\u0430\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c\u0438 \u0437\u043d\u0430\u043a\u0438 \u201c&gt;\u201d \u0438 \u201c=\u201d \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0440\u044f\u0434\u043e\u043c, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u043e\u0434\u043d\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u201c&gt;=\u201d (\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u043b\u0435\u043a\u0441\u0435\u043c\u0443!). \u041f\u0430\u0440\u0441\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u0435 \u0436\u0435\u043b\u0430\u0435\u0442 \u2013 \u043e\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0437\u043d\u0430\u043a\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043b\u0435\u043a\u0441\u0435\u043c\u043e\u0439. \u0421\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043b\u0435\u043a\u0441\u0435\u043c, \u0438 \u0435\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u043a\u0438 \u0441\u0442\u043e\u044f\u0442 \u0440\u044f\u0434\u043e\u043c \u2013 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0435\u043c \u201cpostpro\u201d. \u0412\u043e\u0442 \u043a\u043e\u0434 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"lisp\">(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 \"&gt;\") (eq c2 \"=\")) (cons \"&gt;=\" (postpro (cddr lex-list))))                ((and (eq c1 \"&lt;\") (eq c2 \"=\")) (cons \"&lt;=\" (postpro (cddr lex-list))))                ((and (eq c1 \"=\") (eq c2 \"=\")) (cons \"==\" (postpro (cddr lex-list))))                ((and (eq c1 \"&lt;\") (eq c2 \"&gt;\")) (cons \"&lt;&gt;\" (postpro (cddr lex-list))))                ((and (eq c1 \"&gt;\") (eq c2 \"&lt;\")) (cons \"&lt;&gt;\" (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))))))))) <\/code><\/pre>\n<p>  \u0422\u043e\u0436\u0435, \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e. \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u043f\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lisp\">(defun mk-intf (txt)   (let ((lex (postpro (parser (prepro txt) \" ,\" \"()+-*\/\\^=&lt;&gt;%\")))         (intf \"\"))    (iter (for a in lex) (setq intf (strCat intf a \" \")))    (try          (input (strCat \"(\" intf \")\"))     except         (progn             (printsline (strCat \"**** \" (errormessage)))            `(,txt) )))) <\/code><\/pre>\n<p>  \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e inf2ipn. \u041a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0433\u0443\u0442 \u0435\u0451 \u201c\u0441\u0432\u0430\u043b\u0438\u0442\u044c\u201d? \u041d\u0435\u0441\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u043e\u0431\u043e\u043a \u043c\u044b \u0443\u0436\u0435 \u043e\u0442\u0441\u0435\u043a\u043b\u0438 \u0432\u044b\u0448\u0435. \u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0435? \u0414\u0432\u0430 \u0437\u043d\u0430\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430, \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043f\u043e\u0434\u0440\u044f\u0434. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u043a\u043e\u0434\u0435 inf2ipn (\u0438 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e). \u041c\u044b \u0436\u0435 \u201c\u043e\u0442\u043b\u043e\u0432\u0438\u043c\u201d \u044d\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0438\u0437 \u041e\u041f\u0417 \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u0443\u044e. \u0418 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 (\u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439) \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0438\u0437 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u0443\u044e. \u0421\u0430\u043c\u043e\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 i2p. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lisp\">(defun i2p (f)   (try    (ipn2pref (inf2ipn f))    except (progn (printsline \"**** \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\")                   (printsline (strCat \"**** \" (errormessage)))                  (setq *flagerr* t) nil)))         <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u043c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u0445 \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u0438\u0437 \u041e\u041f\u0417 \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443. \u041f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u0432 \u0441\u0442\u0435\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u2013 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u0418 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c (\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0438\u043c) \u0447\u0438\u0441\u043b\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u042d\u0442\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u201c\u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c\u201d:<\/p>\n<pre><code class=\"lisp\">(defun ipn2pref (f &amp;optional (s nil))   (cond ((null f) (if (null (cdr s)) (car s)          (progn (printsline \"**** \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\")                 (setq *flagerr* t) nil)))         ((numberp (car f)) (ipn2pref (cdr f) (cons (car f) s)))         ((is-op (car f))          (let ((ar (arity (car f))))            (if (&lt; (length s) ar)                           (progn (setq *flagerr* t)                        (printsline \"**** \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\") 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))))))  <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u201c\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c\u201d \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 proc. \u041c\u044b \u044f\u0432\u043d\u043e \u0443\u043f\u0443\u0441\u0442\u0438\u043b \u0434\u0432\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0435\u0451 \u0430\u0440\u043d\u043e\u0441\u0442\u044c (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432) \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e *oplist*. \u0410 \u0432\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043d\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f! \u0422\u043e\u0447\u043d\u0435\u0435, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0448\u0438\u043c \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0444\u043e\u0440\u043c\u044b, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c. \u0427\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438\u0437 \u041f\u0430\u0441\u043a\u0430\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e result. \u0422\u0435\u043f\u0435\u0440\u044c, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043c\u044f result \u0432 \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c. \u0412\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e action-proc \u043a \u0432\u0438\u0434\u0443:<\/p>\n<pre><code class=\"lisp\">(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 \"**** \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \" (output stmt) \" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\"))                  (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))) <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u044b \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f (\u0445\u043e\u0442\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u043c \u0435\u0449\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u044f\u0442\u0441\u044f, \u0438 \u043a\u043e\u0434 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c; \u043d\u043e \u0442\u0430\u043a\u043e\u0432 \u0443\u0436 \u0443\u0434\u0435\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u2026) \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043c\u0435\u0441\u0442\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n<h3>\u041c\u0435\u043b\u043a\u0438\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u2026<\/h3>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432 \u044f\u0437\u044b\u043a\u0435 \u043e\u0434\u0438\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443. \u041d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e. \u0412 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 getLine \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0438 \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u201c _\u201d. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u2013 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"lisp\">(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)))))) <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435. \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0432 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e \u043d\u0443\u043b\u044f \u0438\u043b\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u044b). \u042d\u0442\u043e \u043f\u0440\u0438\u0434\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438, \u043a\u0441\u0442\u0430\u0442\u0438, \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0443\u0445\u0443 \u0431\u044d\u0439\u0441\u0438\u043a\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0436\u0435 \u043c\u0438\u043d\u0438-\u0431\u044d\u0439\u0441\u0438\u043a\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435:<\/p>\n<pre><code>z=(x&gt;y)*5+(x&lt;=y)*10 <\/code><\/pre>\n<p>  \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0418 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e: \u0432 \u041b\u0438\u0441\u043f\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (&gt; x y) \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e Nil \u0438\u043b\u0438 T. \u0410 Nil\/T \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 5\u2026 \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e\u0439 \u0431\u0435\u0434\u0435 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043c\u043e\u0447\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u0430\u043a\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 0\/1 (\u0432\u043c\u0435\u0441\u0442\u043e Nil\/T):<\/p>\n<pre><code class=\"lisp\">(defmacro $= (x y)  `(if (= ,x ,y) 1 0)) (defmacro $== (x y) `(if (= ,x ,y) 1 0)) (defmacro $&gt; (x y)  `(if (&gt; ,x ,y) 1 0)) (defmacro $&lt; (x y)  `(if (&lt; ,x ,y) 1 0)) (defmacro $\/= (x y) `(if (\/= ,x ,y) 1 0)) (defmacro $&lt;&gt; (x y) `(if (\/= ,x ,y) 1 0)) (defmacro $&lt;= (x y) `(if (&lt;= ,x ,y) 1 0)) (defmacro $&gt;= (x y) `(if (&gt;= ,x ,y) 1 0)) <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ipn2pref, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0412\u043e\u0442 \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430:<\/p>\n<pre><code class=\"lisp\">(ipn2pref (cdr f) (cons (cons (car f) (reverse (subseq s 0 ar))) (subseq s ar))) <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c (car f) \u2013 \u0438\u043c\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u0440\u043e\u0445\u043e\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u043c\u0435\u043d\u044b \u043a\u043e\u0434\u043e\u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"lisp\">(defun chng-comp (op)   (if (member op '(= == \/= &lt;&gt; &gt; &lt; &gt;= &lt;=)) (implode (cons '$ (explode op))) op)) <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0435\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0438, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b \u201c$\u201d. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0435 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ipn2pref:<\/p>\n<pre><code class=\"lisp\">(ipn2pref (cdr f) (cons (cons (chng-comp (car f)) (reverse (subseq s 0 ar))) (subseq s ar))) <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435? \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0430\u043a\u0440\u043e, \u0430 \u0432\u0441\u0435 \u043f\u0440\u043e\u0447\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code>proc test()  local x,y  x=1  y=2  result=(x&gt;y)*5+(x&lt;=y)*10 end_proc <\/code><\/pre>\n<p>  \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0435\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. <\/p>\n<p>  \u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u2013 \u0432\u0441\u0451. <br \/>  \u041a\u043e\u0434 \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d <a href=\"https:\/\/yadi.sk\/d\/BrEyvX7mM3VqAA\"><b>\u0437\u0434\u0435\u0441\u044c<\/b><\/a> <br \/>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442.<\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/post\/423663\/\"> https:\/\/habr.com\/post\/423663\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><a href=\"https:\/\/habr.com\/post\/421445\/\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a><\/p>\n<h3>\u041e\u0448\u0438\u0431\u043a\u0438, \u041e\u0448\u0438\u0431\u043a\u0438, \u041e\u0448\u0438\u0431\u043a\u0438\u2026<\/h3>\n<p>  \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u042d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0441\u0441\u043f\u043e\u0440\u043d\u043e. \u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0430 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 \u2013 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0442\u044c (\u043f\u0440\u043e\u0444\u0438\u043b\u0430\u043a\u0442\u0438\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u043b\u0435\u0447\u0435\u043d\u0438\u044f!). \u0412\u044b\u0441\u0448\u0438\u0439 \u043f\u0438\u043b\u043e\u0442\u0430\u0436 \u2013 \u0442\u0430\u043a \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043c\u043e\u0433 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-289569","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/289569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=289569"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/289569\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=289569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=289569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=289569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}