{"id":469909,"date":"2025-08-07T09:00:39","date_gmt":"2025-08-07T09:00:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=469909"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=469909","title":{"rendered":"<span>GIMP Script-Fu \u041e\u041e\u041f. Dot \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/gitflic.ru\/project\/nuinu\/gimp-script-fu-ext\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a Script-fu<\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f Script-fu \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043d\u0430\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u042f \u043f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u043b \u0443\u0439\u043c\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u041e\u041e\u041f \u0432 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u043e. \u041d\u0443 \u0447\u0442\u043e \u0442\u043e\u043b\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 List \u0432 \u041b\u0438\u0441\u043f\u0435? \u0410 \u043a\u043b\u0430\u0441\u0441 Stack? \u041f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u0435\u0441\u0442\u0440\u044f\u0442 \u043a\u043d\u0438\u0436\u043a\u0438 \u043f\u043e \u0421\u0438++. \u0412\u0441\u0451 \u0431\u044b\u043b\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u0432\u043e\u0442 \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u043a\u043d\u0438\u0436\u043a\u0443 &#171;\u0422\u0435\u043e\u0440\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432&#187; \u0422\u043e\u043c\u0430 \u0421\u0442\u044e\u0430\u0440\u0442\u0430, \u0438 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u043d\u0435\u0451, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Ruby, \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438. \u0414\u0430 \u0432 Ruby \u043d\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0441\u0438\u043d\u044b, \u0447\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u0418 \u0432\u043e\u0442 \u0434\u0435\u043b\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u044d\u0442\u043e\u0439, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439(\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u0435\u043e\u0440\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439) \u043a\u043d\u0438\u0436\u043a\u0438 \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e <strong>\u043c\u043e\u0439 \u043a\u043e\u0434 <\/strong>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <strong>\u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u0447\u0435\u043c \u043a\u043e\u0434 Ruby<\/strong>. \u0418 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0437\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u0420\u0443\u0431\u0438. \u0421\u0430\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0420\u0443\u0431\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430.<\/p>\n<h2>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435, \u0434\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0420\u0443\u0431\u0438(\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u043c\u0443) \u043f\u0435\u0440\u0435\u0434 \u041b\u0438\u0441\u043f<\/h2>\n<ul>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">;;Ruby a + b  ;;lisp \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 +(a b) (+ a b)<\/code><\/pre>\n<p>\u043c\u0435\u043b\u043e\u0447\u044c, \u0434\u0432\u0435 \u0441\u043a\u043e\u0431\u043a\u0438, \u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u043b\u043e\u0447\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0432\u0441\u0451 \u0436\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u043d\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0420\u0443\u0431\u0438(\u0438 \u0434\u0440.)<\/p>\n<pre><code class=\"lisp\">(+ a b c d) ;;\u0438 \u0447\u0435\u043c \u043a\u0440\u0443\u0447\u0435 \u0442\u0430\u043a\u043e\u0439 \"\u043f\u043e\u0432\u043e\u0440\u043e\u0442\" \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u044c \u043b\u0438\u0441\u043f\u0430.  <\/code><\/pre>\n<ul>\n<li>\n<p>\u0422\u043e\u0447\u0435\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c(\u043f\u043e\u043b\u044f\u043c) \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. <strong>Dot-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">;;\u0420\u0443\u0431\u0438 obj.field  ;;\u043c\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043b\u043e\u0442\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (vfield obj :field)  ;; CLOS (slot-value obj 'slot) <\/code><\/pre>\n<p>\u0434\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u0432\u0430\u0442\u043e, \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0430 \u0431\u043e\u043b\u0438, \u043d\u043e \u043a\u043e\u0435-\u0447\u0442\u043e \u044f \u0441\u043c\u043e\u0433\u0443 \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c.<\/p>\n<ul>\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">;;\u0420\u0443\u0431\u0438 class Variable &amp;lt; Struct.new(:name) def to_s    name.to_s end  def inspect    \"&lt;#{self}&gt;\"     end      def reducible?    true end end  ;;\u043c\u043e\u044f \u043e\u043e\u043f, \u0434\u0430 \u0438 CLOS \u0442\u043e\u0436\u0435. (defclass Variable (Object)    (name))  (defmethod (inspect (o Variable) cycle)    (to-str (vfield o :name)))  (defmethod (reducible? (o Variable))   #t) ;;\u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f    (defclass Object () ())  (defmethod (to-s (o Object))   (inspect o nil)) <\/code><\/pre>\n<p>\u0414\u0430\u0436\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e, \u044f \u0431\u044b \u0434\u0430\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0433\u043e, \u0441\u043b\u0443\u0447\u0430\u044f \u0438 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043c\u0435\u0442\u043e\u0434 <code>to-s<\/code> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f <strong>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f<\/strong> \u043a\u0430\u043a \u0442\u043e <strong>\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e<\/strong>. \u0418 \u044d\u0442\u043e \u043c\u044b \u0435\u0449\u0451 \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>defgeneric<\/code>. \u041c\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0432 Ruby \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0442, \u044d\u0442\u043e \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422\u0430\u043c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430. \u0422\u0430\u043a \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c?(\u043a\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u0432 \u041f\u0438\u0442\u043e\u043d\u0435). \u0410 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 <strong>\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/strong>,<strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u0431\u044b \u043d\u0430\u0448\u0438 \u043c\u0435\u0442\u043e\u0434\u044b<\/strong>, \u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 <strong>\u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0443<\/strong>, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0435\u0433\u043e \u0442\u0438\u043f? \u0414\u0430 \u0441\u043c\u043e\u0436\u0435\u043c! \u0421\u041c\u041e\u0416\u0415\u041c! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c:<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f &#171;\u0427\u0410\u0421\u0422\u041d\u041e\u0413\u041e \u0421\u041b\u0423\u0427\u0410\u042f&#187;<\/h2>\n<p>\u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u041f\u0420\u041e\u0421\u0422\u042b\u0425 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0430\u043d\u0430\u0444\u043e\u0440\u0443(\u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u0434\u0435 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430 \u043d\u0435\u0451 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435) \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>self<\/code>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0443\u044e \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<pre><code class=\"lisp\">;;\u0425\u043e\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 (defmethods Class   (Method1 ((p1 TypeParam) (p2 TypeParam) p3 p4 ...)      ..... self - \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 Class \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0432\u044b\u043c, \u043f\u043e \u043c\u0438\u043c\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 p1 ...pn    )   (Method2 (p1 (p2 TypeParam2))      (with-slots (((f1 field1) field2) self                   ((f2 field3) field4) p2)      .......)) ) ;; \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 ;; (defmethod (Method1 (self Class) (p1 TypeParam) (p2 TypeParam) p3 p4 ...) body) ;; (defmethod (Method2 (self Class) p1 (p2 TypeParam2)) body)  (define-macro (defmethods class . methods)   (let* ((methods-list '()))     (for-list (el methods)        (let ((name-method (car  el))              (params      (cons (list 'self class) (cadr el)))              (body        (cddr el)))          (push methods-list                `(defmethod (,name-method ,@params) ,@body))))     `(begin        ,@(reverse methods-list)))) <\/code><\/pre>\n<p><strong>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/strong>, <em>\u0434\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432(\u043d\u043e \u0432\u0441\u0451 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 <\/em><code>obj5.scm<\/code>).<\/p>\n<p>\u041a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430?<\/p>\n<pre><code class=\"lisp\">(defclass Variable (Object)    (name))  ;; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 (defmethods Variable   (inspect (cycle)     (to-str (vfield self :name)))    (reducible? () #t)) )<\/code><\/pre>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u0432 \u043b\u0438\u0441\u043f\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0420\u0443\u0431\u0438, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043b\u0430\u0441\u0441\u0443 <code>Object<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u043c\u0435\u0442\u043e\u0434 <code>to-s<\/code>, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439(\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439) \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0442\u0438\u043f\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0435\u0442\u043e\u0434 <code>inspect<\/code>. \u0425\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>inspect<\/code>, \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Object<\/code> \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043b\u044e\u0431\u043e\u0439 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0439, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0438 \u0432\u0437\u0430\u0438\u043c\u043d\u043e-\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041d\u043e \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0441\u0443\u0442\u044c, \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0442\u043e <strong>\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u0442\u0430\u043b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435<\/strong> \u0438 \u044d\u0442\u043e \u043d\u0430 \u0441\u043c\u0435\u0448\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f 5 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 10 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043e\u0441\u0432\u043e\u0438\u0432\u0448\u0438\u0439 \u0434\u0432\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code><strong>defclass<\/strong><\/code> \u0438 <code><strong>defmethods<\/strong><\/code> <strong>\u043d\u0435<\/strong> \u0441\u043c\u043e\u0433 \u0431\u044b <strong>\u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c CLOS \u0438 \u0420\u0443\u0431\u0438<\/strong>, \u0438\u043b\u0438 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u041f\u0438\u0442\u043e\u043d\u043e\u043c. \u041d\u0443 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u041d\u0443 \u0432 \u0420\u0443\u0431\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u044b, \u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u043e\u044f\u0442 \u0433\u0434\u0435 \u0442\u043e \u0442\u0430\u043c \u0441\u0431\u043e\u043a\u0443, \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <code>Struct<\/code>. \u041d\u043e \u0432 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442. \u0412\u043e\u0442 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430(\u043e\u0431\u044a\u0435\u043a\u0442\u0430), \u0430 \u0432 \u043f\u0438\u0442\u043e\u043d\u0435 \u0438\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430(\u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f. \u041d\u0443 \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435.<\/p>\n<p>\u041d\u043e \u0432\u044b\u0432\u043e\u0434 \u0447\u0442\u043e \u044f \u043c\u043e\u0433\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439( \u044f \u043a\u0430\u043a \u0431\u044b \u043e\u0442\u043d\u0451\u0441 \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u044b \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443), \u0437\u043d\u0430\u0447\u0438\u0442 <strong>\u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 CLOS<\/strong> \u0433\u043e\u0440\u0430\u0437\u0434\u043e(\u043d\u0443 \u043b\u0430\u0434\u043d\u043e \u0443\u0436 &#8212; \u041d\u0415\u041c\u041d\u041e\u0413\u041e) <strong>\u0428\u0418\u0420\u0415<\/strong>, \u043f\u0440\u0435\u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435 <strong>\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u041e\u041e \u0441\u0438\u0441\u0442\u0435\u043c<\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u0443 \u043d\u0430\u0441 &#171;\u0432\u0441\u0451 \u043a\u0430\u043a \u0443 \u043b\u044e\u0434\u0435\u0439&#187;.<\/p>\n<h2>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c(\u0441\u043b\u043e\u0442\u0430\u043c) \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0414\u043b\u0438\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0412 CLOS  \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 <strong>\u043c\u0430\u043a\u0440\u043e\u0441 <\/strong><code><strong>with-slots<\/strong><\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 <strong>\u0441\u0432\u044f\u0437\u0430\u0442\u044c<\/strong> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 <strong>\u0430\u043b\u0438\u0430\u0441 \u0441\u043e \u0441\u043b\u043e\u0442\u043e\u043c \u043f\u043e\u043b\u044f<\/strong> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e<strong> \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/strong>. \u042f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418 \u0432\u0441\u0451 \u043f\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435:<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0434\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430: \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0438\u043b\u0438 \u0436\u0435 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u0438\u0437 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u043e \u043f\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0438 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043c\u0435\u0442\u043e\u0434, \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u043b\u044e. \u0410 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u0432\u0441\u0451 &#171;\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f&#187; \u043d\u0435\u043a\u0438\u043c \u0443\u043c\u043d\u0438\u043a\u0430\u043c \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b GIMP, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043a\u0440\u044b\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432 Script-fu(\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442-\u0444\u0443 \u0441 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c). \u0410 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u0447\u0451\u0442 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043c\u043e\u0433 \u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u044c\u0435 \u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0448\u043d\u0443\u044e-\u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0447\u0440\u0435\u0437\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043d\u0430\u0448\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0434\u043b\u044f \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a \u043d\u0430\u0448 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <code>with-slots<\/code><\/p>\n<pre><code class=\"lisp\">;;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 vfield \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c? \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0432 \u043a\u043e\u0434 ;;\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 with-slots, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u043a\u0430\u043a: (with-slots ((slot11 slot12 ..) obj1              (slot21 slot22 ..) obj2              ...)             body) ;;slot \u044d\u0442\u043e \u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a (\u0438\u043c\u044f_\u0434\u043b\u044f_\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f_\u043a_\u0441\u043b\u043e\u0442\u0443 \u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430)  ;;\u0438\u043c\u044f_\u0434\u043b\u044f_\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f_\u043a_\u0441\u043b\u043e\u0442\u0443 (\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432)-&gt; (vfield obj :\u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430) ;;\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u043b\u043e\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u043c: (set! \u0438\u043c\u044f_\u0434\u043b\u044f_\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f_\u043a_\u0441\u043b\u043e\u0442\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435) -&gt; (vfield! obj \u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)  (define-macro (with-slots slot-objs . body)   (let* ((slots (parse-slot-objs slot-objs))          (lets-and-body  (build-body-methods-with-slots slots body)))     `(let (,@(car lets-and-body))        ,@(cdr lets-and-body)))) <\/code><\/pre>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c.  \u0448\u0443\u0447\u0443, \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0432\u044f\u0437\u043a\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c with-slots<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043b\u0438\u0430\u0441\u0430, \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u0443\u043a\u0430\u0437\u0430\u043d \u043a\u0430\u043a name (struct slot-def   (name slot obj key name-get name-set))  ;;\u0440\u0430\u0437\u0431\u043e\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438\u043b\u0438 \u0430\u043b\u0438\u0430\u0441\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (define-m (parse-slot-objs slot-objs)   (let ((rez '()))     (do ((cur slot-objs (cddr cur))) ((or (null? cur)      (null? (cdr cur))))       (let ((obj (cadr cur)))     (for-list (el (car cur))   (let ((name (if (pair? el)   (car el)   el)) (slot (if (pair? el)   (cadr el)   el)))     (let* ((key (make-symbol \":\" slot)))       (push rez (slot-def! name slot obj key (gensym) (gensym))))))))   rez))  ;;\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043b\u044f\u043c\u0431\u0434\u0430 ;; move to util.scm (define (tagged-list? exp tag)   (and (pair? exp) (eq? (car exp) tag)))   ;;(list? exp) (define (lambda? exp) (tagged-list? exp 'lambda)) (define (lambda-parameters lambda-exp) (cadr lambda-exp)) (define (lambda-body lambda-exp) (cddr lambda-exp)) (define (make-lambda params body)   (let ((tmp-rez1 (cons 'lambda (cons params body))))     tmp-rez1))   ;;\u043f\u0440\u043e\u043e\u0434\u0438\u0442 \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0443 \u0438\u043c\u0451\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0433\u0435\u0442\u0442\u0435\u0440\u044b \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u044b \u043f\u043e\u043b\u0435\u0439 \u0441\u043b\u043e\u0442\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. (define-m (tree-expr-replace-get-set expr var build-get build-set)   (let ((use-get #f)     (use-set #f)     (tree-expr-replace-get-set-rec #f))     (set! tree-expr-replace-get-set-rec   (lambda (expr)      (cond ((null? expr)    (begin      '()))   ((lambda? expr) ;;\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u043b\u044f\u043c\u0431\u0434\u0435 \u0435\u0441\u0442\u044c \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0438, \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e    (let ((params  (lambda-parameters expr)))      (if (cdr (find (lambda (elem) (eq? var elem)) params))   expr ;;\u043e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043b\u044f\u043c\u0431\u0434\u044b \u0437\u0430\u0442\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u0448\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e var, \u0434\u0430\u043b\u044c\u0448\u0435 \u0437\u0430\u043c\u0435\u043d\u0443 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c   (make-lambda params ;;\u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u043d\u0435\u0442, \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c        (tree-expr-replace-get-set-rec (lambda-body expr))))      ))   ((eq? expr var)    (unless use-get (set! use-get #t))    (build-get))   ((and (pair? expr)   ;;(list? expr) (= (length expr) 3) (eq? 'set! (car expr)) (eq? (cadr expr) var))               (unless use-set (set! use-set #t))       (build-set (tree-expr-replace-get-set-rec (caddr expr))))    ((pair? expr)      ;;(list? expr)     (cons (tree-expr-replace-get-set-rec (car expr))       (tree-expr-replace-get-set-rec (cdr expr))))    (#t     expr))))     (let ((rez (tree-expr-replace-get-set-rec expr)))       (cons (list use-get use-set) rez))   ))   ;;\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0442\u0435\u043b\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0451\u043d \u0441\u0442\u0430\u0432\u0438\u0442 \u0432\u044b\u0437\u043e\u0432\u044b \u0433\u0435\u0442\u0442\u0435\u0440\u043e\u0432 \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u043e\u0432, ;;\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f \u043b\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0433\u0435\u0442\u0442\u0435\u0440\u043e\u0432 \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0442\u0435\u043b\u043e. (define-m (build-body-methods-with-slots slots body)   (let ((let-list '())         (rez-body body)         (tmp-rez  '()))     (for-list (el slots)         (set! tmp-rez (tree-expr-replace-get-set                        rez-body                        (slot-def-name el)                        (lambda ()  `(,(slot-def-name-get el) ,(slot-def-obj el)))                        (lambda (v) `(,(slot-def-name-set el) ,(slot-def-obj el) ,v))))         (set! rez-body (cdr tmp-rez))         (when (caar tmp-rez)           (push let-list `(,(slot-def-name-get el)                            (get-vfield-getter ,(slot-def-obj el) ,(slot-def-key el)))))         (when (cadar tmp-rez)           (push let-list `(,(slot-def-name-set el)                            (get-vfield-setter ,(slot-def-obj el) ,(slot-def-key el)))))         )     (cons let-list rez-body))) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430.<\/p>\n<pre><code class=\"lisp\">;;\u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0430\u0432\u0438\u043b (defclass FARule (Object)   (state character next-state))      (defmethods FARule   (applies-to? (st chr)     (with-slots ((state character) self)       (and (equal? state st) (char=? character chr))))   (follow ()    (with-slots ((next-state) self)        next-state))   (inspect (cycle)     (with-slots ((state  character next-state)  self)       (join-to-str \"# #{\" next-state \"}&amp;gt;\")))   ) <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>;\u0438\u043b\u0438 \u0432\u043e\u0442 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u043e\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(defclass DFA (Object)   (start current-state accept-states rulebook))    (defmethods DFA   (inspect (cycle)     (with-slots ((current-state accept-states rulebook) self)       (join-to-str \"DFA: \" current-state \"\/\"                    (avl-tree-get-ordered-values (set*-base accept-states)) \"\/\"                    (inspect rulebook cycle))))   (accepting? ()     (with-slots ((current-state accept-states) self)        (set-has? accept-states current-state)))   (reset ()     (with-slots ((start current-state) self)       (set! current-state start)))      ;;\u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043b\u043e\u0442\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 self   )<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0442\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/strong> \u0438 <strong>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/strong>, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f <strong>\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u044b<\/strong>.<\/p>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0451 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c? \u0420\u0430\u0437\u0432\u0435 \u0447\u0442\u043e <strong>\u0441\u043e\u0432\u0435\u0442<\/strong>:<em> \u0412\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0438\u043c\u0435\u043d\u0430 \u0430\u043b\u0438\u0430\u0441\u043e\u0432 \u043f\u043e\u043b\u0435\u0439 \u043a\u0430\u043a \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u0440\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044f. \u041b\u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443 \u0432\u0430\u0441 \u043e\u0434\u0438\u043d, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439. \u0418\u043d\u0430\u0447\u0435 \u0430\u043b\u0438\u0430\u0441\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0430\u0441 \u043f\u0443\u0442\u0430\u0442\u044c<\/em>.<\/p>\n<h2>Dot \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441.<\/h2>\n<p>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <strong>\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u044f\u043c \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0447\u043a\u0443<\/strong> \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b <strong>\u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/strong>, \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 <code>with-stru<\/code>, \u043a\u043e\u0433\u0434\u0430 \u043f\u0438\u0441\u0430\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 AVL-\u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c\u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u043f\u043e\u043b\u044f\u043c \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0443\u0437\u043b\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0430\u0446\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u0432\u044b\u0441\u043e\u0442\u044b \u0443\u0437\u043b\u0430:<\/p>\n<pre><code class=\"lisp\">(define (avl-node-calculate-height node)    (begin       (avl-node-height! node (+ 1 (max (if (null? (avl-node-left node))                                            0 (avl-node-height (avl-node-left node)))                                        (if (null? (avl-node-right node))                                            0 (avl-node-height (avl-node-right node)))))))) <\/code><\/pre>\n<p>\u0412\u044b\u0437\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0430\u0446\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\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.<\/p>\n<pre><code class=\"lisp\">;;\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 node.right  ;; (with-stru ;;    (stru-var1 type-stru-var1 ;;\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0442\u0438\u043f\u043e\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 ;;     stru-var2 type-stru-var2 ;;     stru-var3 type-stru-var3 ;;     ........) ;;    (set! stru-var1.fields11   value11)   ;;\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b ;;    (prn  stru-var1.fields12) ;;    .... ;;    body) <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u043d \u043c\u0430\u043a\u0440\u043e\u0441.<\/p>\n<pre><code class=\"lisp\">(define-macro (with-stru var-stru . body)   (let* ((vars   (parse-var-stru var-stru body))            (new-body  (tree-expr-replace-vars-dot-fields body vars))) ;;     `(begin ,@new-body))) <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0432\u0441\u0451  \u043f\u0440\u043e\u0441\u0442\u043e, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u0442\u0438\u043f\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0438 \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441 \u0442\u043e\u0447\u043a\u0430\u043c\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0438 \u043e\u043d\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0443. \u0421\u0438\u043c\u0432\u043e\u043b \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0442\u043e\u0447\u043a\u0443 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0430\u0446\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043a \u043f\u043e\u043b\u044e \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0442\u0438\u043f\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u0430\u043a\u0440\u043e\u0441\u0430.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u0438\u043c\u0432\u043e\u043b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 (define-m (string-at-end str ch)    (let ((len (- (string-length str) 1)))       (do ((i len (- i 1)))             ((or (&lt; i 0)                  (char=? (string-ref str i) ch))              (if (&lt; i 0) #f i)))))  ;;\u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0434\u0432\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0435\u0441\u043b\u0438 \u0432 \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0430, \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0442\u043e\u0447\u0435\u043a \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443. (define (split-dot-symbol symb)    (let* ((str (symbol-&gt;string symb))           (len (string-length str)))       (if (&gt; len 2)           (let ((pos (string-at-end str #\\.)))              (if (and pos (&gt; pos 0) (&lt; pos (- len 1)))                  (cons (string-&gt;symbol (substring str 0 pos))                        (string-&gt;symbol (substring str (+ pos 1))))                  #f))           #f)))   (struct var-stru-def   (var type))   ;;\u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0437\u0430\u0434\u0432\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0443\u044e ;;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e (define-m (parse-var-stru var-stru)   (let ((rez '()))     (do ((cur var-stru (cddr cur)))           ((or (null? cur)                (null? (cdr cur))))        (let ((var         (car cur))              (type-stru   (cadr cur)))           (if (pair? var)               (for-list (el (reverse var))                     (push rez (var-stru-def! el type-stru)))               (push rez (var-stru-def! var type-stru)))))     rez))  (struct field-def   (name field var name-get name-set))   (define-m (tree-expr-replace-vars-dot-fields expr var-list)    (let ((aliases     (make-hash 16))          (tree-expr-replace-get-set-rec #f)          (is-alias-fields #f)          (fd              #f) ;;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f          (in-var-list (lambda (var var-list) (find (lambda (x) (eq? ( var-stru-def-var x ) var)) var-list)))          (exclude-params (lambda (var-list params)                             (remove-if (lambda (var)                                           (cdr (find (lambda (elem) (eq? (var-stru-def-var var) elem)) params))) var-list))))       (set! is-alias-fields          (lambda (expr var-list)             (if (symbol? expr)                 (let ((rez (hash-ref aliases expr))) ;;\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0445\u0435\u0448.                    (if (car rez)                        (cdr rez) ;;\u0432\u0435\u0440\u043d\u0451\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043e\u043d \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f get \u0438 set                        (let ((var-field (split-dot-symbol expr))) ;;\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \"\u0440\u0430\u0437\u0431\u0438\u0442\u044c\" \u0441\u0438\u043c\u0432\u043e\u043b.                           (if var-field                               (let ((in-var (in-var-list (car var-field)  var-list)))                                  (if (cdr in-var)                                      (let* ((getter-name  (make-symbol                                                            (var-stru-def-type (car in-var))                                                            \"-\" (cdr var-field)))                                             (setter-name  (make-symbol                                                            (var-stru-def-type (car in-var))                                                            \"-\" (cdr var-field) \"!\"))                                             (fd (field-def! expr (cdr var-field) (car var-field)                                                             getter-name                                                             setter-name)))                                         (hash-set! aliases expr fd)                                         fd);;\u0432\u0435\u0440\u043d\u0451\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f                                      #f)) ;;\u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u0430 \u043f\u0430\u0440\u0430!!! \u043c\u044b \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438!                               #f))));;\u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f-\u043f\u043e\u043b\u0435                 #f))) ;;\u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0438\u043c\u0432\u043e\u043b!       (set! tree-expr-replace-get-set-rec          (lambda (expr var-list)              (cond ((null? expr) '())                   ((lambda? expr) ;;\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u043b\u044f\u043c\u0431\u0434\u0435 \u0435\u0441\u0442\u044c \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0438, \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e                    (let* ((params  (lambda-parameters expr))                           (local-var-list (exclude-params var-list params)))                       (if (null? local-var-list)                           expr ;;\u043d\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 var-list, \u0434\u0430\u043b\u044c\u0448\u0435 \u0437\u0430\u043c\u0435\u043d\u0443 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c                           (make-lambda params ;;\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u0438\u0435 \u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c\u0438, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c                                        (tree-expr-replace-get-set-rec (lambda-body expr) local-var-list)))                       ))                   ((begin                       (set! fd (is-alias-fields expr var-list))                       fd)                    (list (field-def-name-get fd) (tree-expr-replace-get-set-rec (field-def-var fd) var-list)))                   ((and (pair? expr)   ;;(list? expr)                         (= (length expr) 3)                         (eq? 'set! (car expr))                         (begin                            (set! fd (is-alias-fields (cadr expr) var-list))                            fd))                    (list (field-def-name-set fd)                          ;;(field-def-var fd)                          (tree-expr-replace-get-set-rec (field-def-var fd) var-list)                          (tree-expr-replace-get-set-rec (caddr expr) var-list)))                   ((pair? expr) ;;(list? expr)                    (cons (tree-expr-replace-get-set-rec (car expr) var-list)                          (tree-expr-replace-get-set-rec (cdr expr) var-list)))                   (#t                    expr))))       (let ((rez (tree-expr-replace-get-set-rec expr var-list)))          rez)       )) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0432\u044b\u0441\u043e\u0442\u044b \u0443\u0437\u043b\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lisp\">(define-m (avl-node-calculate-height node)   (with-stru (node       avl-node               node.left  avl-node               node.right avl-node)        (set! node.height (+ 1 (max (if (null? node.left)  0 node.left.height)                                    (if (null? node.right) 0 node.right.height)))))) <\/code><\/pre>\n<h2>\u041d\u0443\u0436\u043d\u043e \u0411\u041e\u041b\u042c\u0428\u0415 \u0441\u0430\u0445\u0430\u0440\u0430!<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u044f \u0434\u0435\u043b\u0430\u043b \u0432 \u043b\u0438\u0441\u043f\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e &#171;\u0443\u043a\u0440\u0430\u0441\u0438\u0442\u044c&#187; \u043a\u043e\u0434 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0440\u0435\u0448\u0435\u0442\u0430 \u044d\u0440\u0430\u0442\u043e\u0441\u0444\u0435\u043d\u0430. \u0412 \u043d\u0451\u043c \u044f \u0432\u0432\u0451\u043b \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<pre><code class=\"lisp\">;;\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043b\u0438\u0441\u043f: (aref a 2)  ;;\u0443\u043a\u0440\u0430\u0448\u0435\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441: a[2] <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430? \u0422\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432!<\/p>\n<pre><code class=\"lisp\">(defmacro with-arr (&amp;body body)   (let ((new-body (tree-expr-replace-aref body)))     `(progn ,@new-body)     ))<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(defun tree-expr-replace-aref (expr)   (let ((fd '()))     (cond ((null expr) '())           ((and             (symbolp expr)             (progn               (setf fd (split-arrayindex-symbol expr))               ;;(prn \"fd: \" fd \"\\n\")               fd))            ;;(list (field-def-name-get fd) (field-def-var fd)))            (list 'aref (tree-expr-replace-aref (car fd)) (cdr fd)))           ((listp expr)            ;;(prn \"TR-REPL: find set!: \" fd \"\\n\")            (cons  (tree-expr-replace-aref (car expr))                   (tree-expr-replace-aref (cdr expr))))           (t            expr))))  (defun split-arrayindex-symbol  (symb)    (let* ((str (symbol-name symb))           (len (length str))           (last (1- len)))      (if (and (&gt; len 3)               (char= (char str last) #\\]))          (let ((pos (string-at-end str #\\[)))            (format nil \"pos: ~A~%\" pos)            (if (and pos (&gt; pos 0) (&lt; pos last))                (cons (read-from-string str nil nil :start 0 :end pos)                       (read-from-string str nil nil :start (+ pos 1) :end last))                nil))          nil)))  (defun string-at-end (str ch)    (let ((last-ind (- (length str) 1)))       (do ((i last-ind (- i 1)))             ((or (&lt; i 0)                  (char= (char str i) ch))              (if (&lt; i 0) nil i))))) <\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>;\u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0435\u0448\u0435\u0442\u0430, \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 for, \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0448\u0430\u0433 \u0446\u0438\u043a\u043b\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">(defmacro for ((var start stop . step) &amp;body body)   (let ((gstop (gensym))         (step  (if (null step) 1 (car step))))     `(do ((,var ,start (+ ,var ,step))           (,gstop ,stop))          ((&gt; ,var ,gstop))        ,@body))) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0440\u0435\u0448\u0435\u0442\u0430 \u044d\u0440\u0430\u0442\u043e\u0441\u0444\u0435\u043d\u0430 \u043d\u0430 \u041b\u0438\u0441\u043f\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lisp\">(defun eratosfen2 (n)   (let ((a (make-array (1+ n))))     (with-arr       (setf a[0] nil)       (setf a[1] nil)       (for (i 2 n)         (setf a[i] i))       (for (i 2 (floor (sqrt n)))         (when a[i]            (for (j (* i i) n i)             (setf a[j] nil))))       (remove nil a)))) <\/code><\/pre>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u044b \u0443\u043b\u0443\u0447\u0448\u0430\u044f \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u043e\u0432. \u0412 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445, \u0431\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0434 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0430\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u0437\u043b\u0438\u0448\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 <strong>Scheme<\/strong>(\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0435\u0439 \u0438 Script-fu) \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u043b\u0438 <strong>\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430<\/strong>, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c \u0434\u0430\u043b\u0438 <strong>\u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430<\/strong> \u0432 \u0440\u0443\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0445\u043e\u0442\u0438 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u044f\u0437\u044b\u043a \u043d\u043e\u0432\u044b\u0435 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0431\u043b\u0430\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e(\u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 <strong>define-m<\/strong>, \u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 &#171;\u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b\u0435&#187; \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c), \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><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\/ru\/articles\/934894\/\"> https:\/\/habr.com\/ru\/articles\/934894\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/gitflic.ru\/project\/nuinu\/gimp-script-fu-ext\" rel=\"noopener noreferrer nofollow\">\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a Script-fu<\/a><\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f Script-fu \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043d\u0430\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u042f \u043f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u043b \u0443\u0439\u043c\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u041e\u041e\u041f \u0432 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u043e. \u041d\u0443 \u0447\u0442\u043e \u0442\u043e\u043b\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 List \u0432 \u041b\u0438\u0441\u043f\u0435? \u0410 \u043a\u043b\u0430\u0441\u0441 Stack? \u041f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u0435\u0441\u0442\u0440\u044f\u0442 \u043a\u043d\u0438\u0436\u043a\u0438 \u043f\u043e \u0421\u0438++. \u0412\u0441\u0451 \u0431\u044b\u043b\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u0432\u043e\u0442 \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u043a\u043d\u0438\u0436\u043a\u0443 &#171;\u0422\u0435\u043e\u0440\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432&#187; \u0422\u043e\u043c\u0430 \u0421\u0442\u044e\u0430\u0440\u0442\u0430, \u0438 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u043d\u0435\u0451, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Ruby, \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438. \u0414\u0430 \u0432 Ruby \u043d\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0441\u0438\u043d\u044b, \u0447\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u0418 \u0432\u043e\u0442 \u0434\u0435\u043b\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u044d\u0442\u043e\u0439, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439(\u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u0435\u043e\u0440\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439) \u043a\u043d\u0438\u0436\u043a\u0438 \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e <strong>\u043c\u043e\u0439 \u043a\u043e\u0434 <\/strong>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <strong>\u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u0447\u0435\u043c \u043a\u043e\u0434 Ruby<\/strong>. \u0418 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0437\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u0420\u0443\u0431\u0438. \u0421\u0430\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0420\u0443\u0431\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430.<\/p>\n<h2>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435, \u0434\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0420\u0443\u0431\u0438(\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u043c\u0443) \u043f\u0435\u0440\u0435\u0434 \u041b\u0438\u0441\u043f<\/h2>\n<ul>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">;;Ruby a + b  ;;lisp \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 +(a b) (+ a b)<\/code><\/pre>\n<p>\u043c\u0435\u043b\u043e\u0447\u044c, \u0434\u0432\u0435 \u0441\u043a\u043e\u0431\u043a\u0438, \u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u043b\u043e\u0447\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0432\u0441\u0451 \u0436\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u043d\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0420\u0443\u0431\u0438(\u0438 \u0434\u0440.)<\/p>\n<pre><code class=\"lisp\">(+ a b c d) ;;\u0438 \u0447\u0435\u043c \u043a\u0440\u0443\u0447\u0435 \u0442\u0430\u043a\u043e\u0439 \"\u043f\u043e\u0432\u043e\u0440\u043e\u0442\" \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u044c \u043b\u0438\u0441\u043f\u0430.  <\/code><\/pre>\n<ul>\n<li>\n<p>\u0422\u043e\u0447\u0435\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c(\u043f\u043e\u043b\u044f\u043c) \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. <strong>Dot-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">;;\u0420\u0443\u0431\u0438 obj.field  ;;\u043c\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043b\u043e\u0442\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (vfield obj :field)  ;; CLOS (slot-value obj 'slot) <\/code><\/pre>\n<p>\u0434\u0430 \u0434\u043b\u0438\u043d\u043d\u043e\u0432\u0430\u0442\u043e, \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0430 \u0431\u043e\u043b\u0438, \u043d\u043e \u043a\u043e\u0435-\u0447\u0442\u043e \u044f \u0441\u043c\u043e\u0433\u0443 \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c.<\/p>\n<ul>\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"lisp\">;;\u0420\u0443\u0431\u0438 class Variable &amp;lt; Struct.new(:name) def to_s    name.to_s end  def inspect    \"&lt;#{self}&gt;\"     end      def reducible?    true end end  ;;\u043c\u043e\u044f \u043e\u043e\u043f, \u0434\u0430 \u0438 CLOS \u0442\u043e\u0436\u0435. (defclass Variable (Object)    (name))  (defmethod (inspect (o Variable) cycle)    (to-str (vfield o :name)))  (defmethod (reducible? (o Variable))   #t) ;;\u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f    (defclass Object () ())  (defmethod (to-s (o Object))   (inspect o nil)) <\/code><\/pre>\n<p>\u0414\u0430\u0436\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e, \u044f \u0431\u044b \u0434\u0430\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0433\u043e, \u0441\u043b\u0443\u0447\u0430\u044f \u0438 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043c\u0435\u0442\u043e\u0434 <code>to-s<\/code> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f <strong>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f<\/strong> \u043a\u0430\u043a \u0442\u043e <strong>\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e<\/strong>. \u0418 \u044d\u0442\u043e \u043c\u044b \u0435\u0449\u0451 \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>defgeneric<\/code>. \u041c\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0432 Ruby \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0442, \u044d\u0442\u043e \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422\u0430\u043c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430. \u0422\u0430\u043a \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c?(\u043a\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u0432 \u041f\u0438\u0442\u043e\u043d\u0435). \u0410 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 <strong>\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/strong>,<strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u0431\u044b \u043d\u0430\u0448\u0438 \u043c\u0435\u0442\u043e\u0434\u044b<\/strong>, \u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 <strong>\u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0443<\/strong>, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0435\u0433\u043e \u0442\u0438\u043f? \u0414\u0430 \u0441\u043c\u043e\u0436\u0435\u043c! \u0421\u041c\u041e\u0416\u0415\u041c! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c:<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f &#171;\u0427\u0410\u0421\u0422\u041d\u041e\u0413\u041e \u0421\u041b\u0423\u0427\u0410\u042f&#187;<\/h2>\n<p>\u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u041f\u0420\u041e\u0421\u0422\u042b\u0425 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0430\u043d\u0430\u0444\u043e\u0440\u0443(\u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u043a\u043e\u0434\u0435 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430 \u043d\u0435\u0451 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435) \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>self<\/code>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0443\u044e \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<pre><code class=\"lisp\">;;\u0425\u043e\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 (defmethods Class   (Method1 ((p1 TypeParam) (p2 TypeParam) p3 p4 ...)      ..... self - \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 Class \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0432\u044b\u043c, \u043f\u043e \u043c\u0438\u043c\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 p1 ...pn    )   (Method2 (p1 (p2 TypeParam2))      (with-slots (((f1 field1) field2) self                   ((f2 field3) field4) p2)      .......)) ) ;; \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 ;; (defmethod (Method1 (self Class) (p1 TypeParam) (p2 TypeParam) p3 p4 ...) body) ;; (defmethod (Method2 (self Class) p1 (p2 TypeParam2)) body)  (define-macro (defmethods class . methods)   (let* ((methods-list '()))     (for-list (el methods)        (let ((name-method (car  el))              (params      (cons (list 'self class) (cadr el)))              (body        (cddr el)))          (push methods-list                `(defmethod (,name-method ,@params) ,@body))))     `(begin        ,@(reverse methods-list)))) <\/code><\/pre>\n<p><strong>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/strong>, <em>\u0434\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432(\u043d\u043e \u0432\u0441\u0451 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 <\/em><code>obj5.scm<\/code>).<\/p>\n<p>\u041a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430?<\/p>\n<pre><code class=\"lisp\">(defclass Variable (Object)    (name))  ;; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 (defmethods Variable   (inspect (cycle)     (to-str (vfield self :name)))    (reducible? () #t)) )<\/code><\/pre>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u0432 \u043b\u0438\u0441\u043f\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0420\u0443\u0431\u0438, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043b\u0430\u0441\u0441\u0443 <code>Object<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u043c\u0435\u0442\u043e\u0434 <code>to-s<\/code>, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439(\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439) \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0442\u0438\u043f\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0435\u0442\u043e\u0434 <code>inspect<\/code>. \u0425\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>inspect<\/code>, \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Object<\/code> \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043b\u044e\u0431\u043e\u0439 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0439, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0438 \u0432\u0437\u0430\u0438\u043c\u043d\u043e-\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041d\u043e \u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0441\u0443\u0442\u044c, \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c \u0447\u0442\u043e <strong>\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u0442\u0430\u043b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u0440\u043e\u0447\u0435<\/strong> \u0438 \u044d\u0442\u043e \u043d\u0430 \u0441\u043c\u0435\u0448\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f 5 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 10 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043e\u0441\u0432\u043e\u0438\u0432\u0448\u0438\u0439 \u0434\u0432\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code><strong>defclass<\/strong><\/code> \u0438 <code><strong>defmethods<\/strong><\/code> <strong>\u043d\u0435<\/strong> \u0441\u043c\u043e\u0433 \u0431\u044b <strong>\u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c CLOS \u0438 \u0420\u0443\u0431\u0438<\/strong>, \u0438\u043b\u0438 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u041f\u0438\u0442\u043e\u043d\u043e\u043c. \u041d\u0443 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u043b\u043e\u0447\u0435\u0439. \u041d\u0443 \u0432 \u0420\u0443\u0431\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u044b, \u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u043e\u044f\u0442 \u0433\u0434\u0435 \u0442\u043e \u0442\u0430\u043c \u0441\u0431\u043e\u043a\u0443, \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <code>Struct<\/code>. \u041d\u043e \u0432 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442. \u0412\u043e\u0442 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430(\u043e\u0431\u044a\u0435\u043a\u0442\u0430), \u0430 \u0432 \u043f\u0438\u0442\u043e\u043d\u0435 \u0438\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430(\u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f. \u041d\u0443 \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435.<\/p>\n<p>\u041d\u043e \u0432\u044b\u0432\u043e\u0434 \u0447\u0442\u043e \u044f \u043c\u043e\u0433\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439( \u044f \u043a\u0430\u043a \u0431\u044b \u043e\u0442\u043d\u0451\u0441 \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u044b \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443), \u0437\u043d\u0430\u0447\u0438\u0442 <strong>\u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 CLOS<\/strong> \u0433\u043e\u0440\u0430\u0437\u0434\u043e(\u043d\u0443 \u043b\u0430\u0434\u043d\u043e \u0443\u0436 &#8212; \u041d\u0415\u041c\u041d\u041e\u0413\u041e) <strong>\u0428\u0418\u0420\u0415<\/strong>, \u043f\u0440\u0435\u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435 <strong>\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u041e\u041e \u0441\u0438\u0441\u0442\u0435\u043c<\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c \u0438 \u0443 \u043d\u0430\u0441 &#171;\u0432\u0441\u0451 \u043a\u0430\u043a \u0443 \u043b\u044e\u0434\u0435\u0439&#187;.<\/p>\n<h2>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c(\u0441\u043b\u043e\u0442\u0430\u043c) \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/h2>\n<p>\u0414\u043b\u0438\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0412 CLOS  \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 <strong>\u043c\u0430\u043a\u0440\u043e\u0441 <\/strong><code><strong>with-slots<\/strong><\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 <strong>\u0441\u0432\u044f\u0437\u0430\u0442\u044c<\/strong> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 <strong>\u0430\u043b\u0438\u0430\u0441 \u0441\u043e \u0441\u043b\u043e\u0442\u043e\u043c \u043f\u043e\u043b\u044f<\/strong> \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e<strong> \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/strong>. \u042f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418 \u0432\u0441\u0451 \u043f\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435:<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0434\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430: \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0438\u043b\u0438 \u0436\u0435 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u0438\u0437 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u043e \u043f\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0438 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043c\u0435\u0442\u043e\u0434, \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u043b\u044e. \u0410 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u0432\u0441\u0451 &#171;\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f&#187; \u043d\u0435\u043a\u0438\u043c \u0443\u043c\u043d\u0438\u043a\u0430\u043c \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b GIMP, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043a\u0440\u044b\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432 Script-fu(\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442-\u0444\u0443 \u0441 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c). \u0410 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u0447\u0451\u0442 \u0445\u0435\u0448-\u043a\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043c\u043e\u0433 \u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u044c\u0435 \u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0448\u043d\u0443\u044e-\u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0447\u0440\u0435\u0437\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043d\u0430\u0448\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0434\u043b\u044f \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a \u043d\u0430\u0448 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <code>with-slots<\/code><\/p>\n<pre><code class=\"lisp\">;;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 vfield \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c? \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0432 \u043a\u043e\u0434 ;;\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 with-slots, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u043a\u0430\u043a: (with-slots ((slot11 slot12 ..) obj1              (slot21 slot22 ..) obj2              ...)             body) ;;slot \u044d\u0442\u043e \u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a (\u0438\u043c\u044f_\u0434\u043b\u044f_\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f_\u043a_\u0441\u043b\u043e\u0442\u0443 \u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430)  ;;\u0438\u043c\u044f_\u0434\u043b\u044f_\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f_\u043a_\u0441\u043b\u043e\u0442\u0443 (\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432)-&gt; (vfield obj :\u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430) ;;\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u043b\u043e\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u043c: (set! \u0438\u043c\u044f_\u0434\u043b\u044f_\u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f_\u043a_\u0441\u043b\u043e\u0442\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435) -&gt; (vfield! obj \u0438\u043c\u044f_\u0441\u043b\u043e\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)  (define-macro (with-slots slot-objs . body)   (let* ((slots (parse-slot-objs slot-objs))          (lets-and-body  (build-body-methods-with-slots slots body)))     `(let (,@(car lets-and-body))        ,@(cdr lets-and-body)))) <\/code><\/pre>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u043b\u044f\u043c.  \u0448\u0443\u0447\u0443, \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0432\u044f\u0437\u043a\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c with-slots<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lisp\">;;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043b\u0438\u0430\u0441\u0430, \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u0443\u043a\u0430\u0437\u0430\u043d \u043a\u0430\u043a name (struct slot-def   (name slot obj key name-get name-set))  ;;\u0440\u0430\u0437\u0431\u043e\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438\u043b\u0438 \u0430\u043b\u0438\u0430\u0441\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (define-m (parse-slot-objs slot-objs)   (let ((rez '()))     (do ((cur slot-objs (cddr cur))) ((or (null? cur)      (null? (cdr cur))))       (let ((obj (cadr cur)))     (for-list (el (car cur))   (let ((name (if (pair? el)   (car el)   el)) (slot (if (pair? el)   (cadr el)   el)))     (let* ((key (make-symbol \":\" slot)))       (push rez (slot-def! name slot obj key (gensym) (gensym))))))))   rez))  ;;\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043b\u044f\u043c\u0431\u0434\u0430 ;; move to util.scm (define (tagged-list? exp tag)   (and (pair? exp) (eq? (car exp) tag)))   ;;(list? exp) (define (lambda? exp) (tagged-list? exp 'lambda)) (define (lambda-parameters lambda-exp) (cadr lambda-exp)) (define (lambda-body lambda-exp) (cddr lambda-exp)) (define (make-lambda params body)   (let ((tmp-rez1 (cons 'lambda (cons params body))))     tmp-rez1))   ;;\u043f\u0440\u043e\u043e\u0434\u0438\u0442 \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0443 \u0438\u043c\u0451\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0433\u0435\u0442\u0442\u0435\u0440\u044b \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u044b \u043f\u043e\u043b\u0435\u0439 \u0441\u043b\u043e\u0442\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. (define-m (tree-expr-replace-get-set expr var build-get build-set)   (let ((use-get #f)     (use-set #f)  <\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-469909","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/469909","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=469909"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/469909\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=469909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=469909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=469909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}