{"id":282271,"date":"2016-12-09T20:15:04","date_gmt":"2016-12-09T17:15:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=282271"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2016-12-09T17:15:04","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=282271","title":{"rendered":"\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b"},"content":{"rendered":"<p><img decoding=\"async\" height=\"30%\" width=\"30%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8ac\/905\/f32\/8ac905f32d6903fc5e776604455b6577.png\" align=\"left\"\/>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0445\u043e\u0442\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 C (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e) <a href=\"http:\/\/ivorylang.org\">Ivory<\/a>, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <a href=\"https:\/\/github.com\/frp-arduino\/frp-arduino\">\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Arduino<\/a>, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 <a href=\"https:\/\/github.com\/tomahawkins\/atom\">Atom<\/a>, <a href=\"https:\/\/haskellembedded.github.io\/\">Ion<\/a><\/div>\n<\/div>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043d\u0438\u0436\u0435, \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u0442\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0424\u041f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u0412\u0435\u0434\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u043c\u0431\u0438\u0442\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445, \u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0442\u0430\u0440\u043e\u0435 \u0438 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041a\u043e\u0433\u0434\u0430 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0443\u0447\u0438\u043b Haskell, \u044f \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0440\u043d\u043e\u0439 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u00ab\u043d\u0430 \u0447\u0435\u043c \u043b\u0443\u0447\u0448\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c RS-\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u00bb. \u042f \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0441\u0432\u0435\u0436\u0435\u0438\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u044f\u0437\u044b\u043a \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<br \/>  \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0435\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u0432 Haskell \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435\u0442. \u0417\u0430 \u0442\u043e \u0435\u0441\u0442\u044c \u043b\u0435\u043d\u0438\u0432\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u00ab\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f\u00bb. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e\u0442 \u0441\u043c\u0435\u0448\u043d\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d \u0431\u044b\u043b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u0438\u0432\u0438\u043b\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432\u0441\u044e \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u2014 \u0432\u0441\u044e \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u044e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 (\u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0445\u043e\u0434\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0442\u044c \u0443\u0441\u0438\u043b\u0438\u044f \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u043a \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u2014 \u0432\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0432 Haskell). \u0412 \u043f\u0440\u043e\u0447\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0435\u043c\u0443 \u0434\u0430\u0436\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0430 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0435, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0435\u0447\u0430\u0442\u044c\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u0441\u0435\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u043a\u0442\u0430.<\/div>\n<\/div>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0415\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0441\u0438\u0433\u043d\u0430\u043b \u0440\u0430\u0432\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u043a\u0432\u0430\u043d\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 0  <\/p>\n<pre><code class=\"haskell\">delay s = 0:s <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0438\u043b\u0438 \u0442\u0430\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"haskell\">delay = 0: <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u044b \u043f\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.  <\/p>\n<pre><code class=\"haskell\">data Signal v = S v (Signal v) delay v s = S v s <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b, \u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u0430\u0440 (\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430) \u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f32\/d44\/2ae\/f32d442aed1032adea788b0b89a6b4f3.gif\"\/><br \/>  RS-\u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0434\u0432\u0430 NOR-\u0443\u0437\u043b\u0430, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043d\u043e-\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e. \u0423 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e NOR \u0435\u0434\u0438\u043d\u0438\u0446\u0430, \u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u2014 \u043d\u043e\u043b\u044c. \u041f\u043e\u0434\u0430\u0432\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0445\u043e\u0434 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 NOR-\u0443\u0437\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<br \/>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f RS-\u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u2014 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430. \u041d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e, \u0447\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u0435\u0440\u043d\u043e (\u0434\u0430\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u00ab\u0442\u0430\u043a\u0442\u0430\u00bb \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043b\u0443\u0447\u0448\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430).  <\/p>\n<pre><code class=\"haskell\">nor '_' '_' = '~' nor _ _ = '_'  rs r s = (q, nq)   where      q = '_' : zipWith nor r nq     nq = '_' : zipWith nor q s  main = let    r = &quot;~_______&quot;    s = &quot;___~~___&quot;    (q,nq) = rs r s   in do       print r       print s       print q       print nq <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043f\u043e Haskell<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0442\u043e\u0447\u043d\u0435\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f) \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0431\u0443\u043a\u0432\u044b \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0430\u043b\u0444\u043e\u0432\u0438\u0442\u043d\u043e-\u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 &#8216;:&#8217;. <br \/>  \u0421 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u043a\u0432\u044b (\u0438\u043b\u0438 \u0441 &#8216;:&#8217;) \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 (\u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445) \u0438 \u0438\u043c\u0435\u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<\/p>\n<p>  (:) \u2014 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u043f\u0438\u0441\u043a\u0430. \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a \u0441\u0442\u0430\u0440\u043e\u043c\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442.  <\/p>\n<pre><code class=\"haskell\">0 : [1,2,3,4,5]<\/code><\/pre>\n<p> \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e [0,1,2,3,4,5]<br \/>  \u0421\u0442\u0440\u043e\u043a\u0438 \u0432 Haskell \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u00ab1234\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 [&#8216;1&#8242;,&#8217;2&#8242;,&#8217;3&#8242;,&#8217;4&#8217;]<\/p>\n<p>  zip \u2014 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440.  <\/p>\n<pre><code class=\"haskell\">zip [1,2,3,4] &quot;1234&quot;<\/code><\/pre>\n<p> \u0431\u0443\u0434\u0435\u043d \u0440\u0430\u0432\u043d\u043e <\/p>\n<pre><code class=\"haskell\">[(1,'1'),(2,'2'),(3,'3'),(4,'4')]<\/code><\/pre>\n<p>  zipWith \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432  <\/p>\n<pre><code class=\"haskell\">zipWith (+) [1,2,3,4] [1,3,5,7]<\/code><\/pre>\n<p> \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u043f\u043e\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 [2,5,8,11]<br \/>  zip \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 zipWith  <\/p>\n<pre><code class=\"haskell\">zip = zipWith (,) <\/code><\/pre>\n<p>  zip3 \u0438 zipWith3 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0434\u043b\u044f \u0442\u0440\u0435\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.<\/p>\n<p>  scanl \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u00ab\u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c\u00bb. \u0415\u0433\u043e \u0442\u0438\u043f (\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430) \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"haskell\">scanl :: (b -&gt; a -&gt; b) -&gt; b -&gt; [a] -&gt; [b]<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 scanl \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442 \u0434\u0432\u0443\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430, \u0442\u0440\u0435\u0442\u0438\u0439 \u2014 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.  <\/p>\n<pre><code class=\"haskell\">scanl (+) 0 [1,2,3,4]<\/code><\/pre>\n<p> \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u0441\u0443\u043c\u043c: [0,1,3,6,10]<\/p>\n<p>  ($) \u2014 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0443.  <\/p>\n<pre><code class=\"haskell\">f $ x = f x<\/code><\/pre>\n<p>  \u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043a\u043e\u0431\u043e\u043a:<br \/>  f x $ g y \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e f x (g y)<\/p>\n<p>  \u0417\u0430\u043f\u0438\u0441\u044c \\x y -&gt; f y x \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u0435\u0449\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435\u043c) \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 x \u0438 y.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432. \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043e\u043d\u0438 \u043d\u0435 \u0438\u0441\u043f\u0443\u0433\u0430\u044e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.<\/p>\n<p>  fmap \u2014 \u00ab\u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0434\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0446\u0435\u043b\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u043c, \u043d\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0438\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0422\u0430\u043a \u0436\u0435 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0438, \u0445\u043e\u0442\u044f \u0434\u043b\u044f \u043d\u0438\u0445, \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00abmap\u00bb \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<br \/>  liftA \u2014 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e fmap, \u043d\u043e \u0434\u043b\u044f \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u043e\u0432 (\u043e \u0447\u0435\u043c \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0443\u043a\u0432\u0430 &#8216;A&#8217; \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438). \u0421\u0438\u0433\u043d\u0430\u043b\u044b \u0442\u0430\u043a \u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u0430\u043c\u0438, \u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u043e\u0436\u0435 \u0430\u043f\u043f\u043b\u0438\u043a\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0442\u043e\u0440\u044b \u0438 liftA \u0441 \u043d\u0438\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041d\u043e liftA2 \u0438 liftA3 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e, \u043d\u043e \u044d\u0442\u043e \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  liftA2 \u0438 liftA3 \u00ab\u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442 \u0434\u0432\u0443\u0445 \u0438 \u0442\u0440\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438, \u0430 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c zipWith \u0438 zipWith3.  <\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/\u0423\u0440\u043e\u0432\u0435\u043d\u044c_\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0445_\u043f\u0435\u0440\u0435\u0434\u0430\u0447\">RTL<\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0445\u0435\u043c\u044b. \u0422\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u044f\u0432\u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u043b\u0438 \u044f\u0432\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u0443\u0437\u043b\u0430.  <\/p>\n<pre><code class=\"haskell\">macD r x y = acc   where     prods = zipWith (*) x y     sums = zipWith (+) acc prods     acc = 0 : zipWith (\\r v -&gt; if r == 1 then 0 else v) r sums  macS r x y = scanl macA 0 $ zip3 r x y   where    macA acc (r,x,y) = if r == 1 then 0 else acc+x*y <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u0432\u0435 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 MAC (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c) \u0441 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c. macD \u2014 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439, macS \u2014 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044f\u0432\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e Haskell \u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0443, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438\u0437 \u043d\u0435\u0433\u043e \u043d\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c HDL?<br \/>  \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c: \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 <a href=\"http:\/\/bluespec.com\/\">Bluespec<\/a>, \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 <a href=\"http:\/\/ittc.ku.edu\/csdl\/fpg\/Tools\/KansasLava\">Lava<\/a> \u0438 <a href=\"http:\/\/www.clash-lang.org\/\">C\u03bbaSH<\/a>.<\/p>\n<h1>Clash<\/h1>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c Clash, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0432 VHDL, \u0438 \u0432 SystemVerilog, \u0438 \u0432 \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 Verilog (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/geektimes.ru\/company\/icover\/blog\/273966\/\">\u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0435<\/a> :-)).<br \/>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0441\u0430\u0439\u0442\u0435. \u041a \u043d\u0435\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043d\u0435\u0441\u0442\u0438\u0441\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 ghc-7.x (\u0442\u043e \u0435\u0441\u0442\u044c \u0441 8.x \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c), \u0432\u043e \u0432\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u00abcabal install clash\u00bb \u2014 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u043f\u0430\u043a\u0435\u0442, \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c clash-ghc (\u00abcabal install clash-ghc &#8212;enable-documentation\u00bb).<br \/>  \u0418\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b clash (\u0438\u043b\u0438 clash.exe, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 OS) \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e &quot;~\/.cabal\/bin&quot;, \u043b\u0443\u0447\u0448\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0435 \u0432 $PATH.<br \/>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0443\u0437\u0435\u043b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e clash \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f topEntity, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0437 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 (\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435).<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e\u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0443\u043c\u043c\u0430\u0442\u043e\u0440:  <\/p>\n<pre><code class=\"haskell\">topEntity :: Signal (Bool, Bool) -&gt; Signal (Bool, Bool) topEntity s = fmap (\\(s1,s2) -&gt; (s1 .&. s2, s1 `xor` s2)) s <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"haskell\">module ADD1 where  import CLaSH.Prelude  topEntity :: Signal (Bool, Bool) -&gt; Signal (Bool, Bool) topEntity = fmap (\\(s1,s2) -&gt; (s1 .&. s2, s1 `xor` s2)) <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  fmap \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442 \u043f\u0430\u0440\u044b \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<br \/>  \u041e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0432 verilog \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u00abclash &#8212;verilog ADD1.hs\u00bb  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>\/\/ Automatically generated Verilog-2001 module ADD1_topEntity_0(a1                        ,result);   input [1:0] a1;   output [1:0] result;   wire [0:0] app_arg;   wire [0:0] case_alt;   wire [0:0] app_arg_0;   wire [1:0] case_alt_0;   wire [0:0] s1;   wire [0:0] s2;   assign app_arg = s1 & s2;    reg [0:0] case_alt_reg;   always @(*) begin     if(s2)       case_alt_reg = 1'b0;     else       case_alt_reg = 1'b1;   end   assign case_alt = case_alt_reg;    reg [0:0] app_arg_0_reg;   always @(*) begin     if(s1)       app_arg_0_reg = case_alt;     else       app_arg_0_reg = s2;   end   assign app_arg_0 = app_arg_0_reg;    assign case_alt_0 = {app_arg                       ,app_arg_0};    assign s1 = a1[1:1];    assign s2 = a1[0:0];    assign result = case_alt_0; endmodule <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b \u041c\u0443\u0440\u0430 \u0438 \u041c\u0438\u043b\u0438. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u041c\u0443\u0440\u0430.  <\/p>\n<pre><code class=\"haskell\">data DIV3S = S0 | S1 | S2  div3st S0 _ = S1 div3st S1 _ = S2 div3st S2 _ = S0  div3out S2 = True div3out _ = False  topEntity :: Signal Bool -&gt; Signal Bool topEntity = moore div3st div3out S0 <\/code><\/pre>\n<p>  data \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f Haskell \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  \u0412 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f DIV3S \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 &#8216;|&#8217; \u2014 S0, S1 \u0438 S3.<br \/>  div3st \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c &quot;_&quot; \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430).<br \/>  div3out \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f moore \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0443\u0437\u0435\u043b \u043f\u043e \u0434\u0432\u0443\u043c \u044d\u0442\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 systemverilog<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>\/\/ Automatically generated SystemVerilog-2005 module DIV3Moore_moore(w3                       ,\/\/ clock                       system1000                       ,\/\/ asynchronous reset: active low                       system1000_rstn                       ,result);   input logic [0:0] w3;   input logic system1000;   input logic system1000_rstn;   output logic [0:0] result;   logic [1:0] s1_app_arg;   logic [1:0] s1;   always_comb begin     case(s1)       2'b00 : s1_app_arg = 2'd1;       2'b01 : s1_app_arg = 2'd2;       default : s1_app_arg = 2'd0;     endcase   end    \/\/ register begin   logic [1:0] dout;    always_ff @(posedge system1000 or negedge system1000_rstn) begin : DIV3Moore_moore_register     if (~ system1000_rstn) begin       dout &lt;= 2'd0;     end else begin       dout &lt;= s1_app_arg;     end   end    assign s1 = dout;   \/\/ register end    always_comb begin     case(s1)       2'b10 : result = 1'b1;       default : result = 1'b0;     endcase   end endmodule <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u041c\u0438\u043b\u0438:  <\/p>\n<pre><code class=\"haskell\">data DIV3S = S0 | S1 | S2  div3 S0 _ = (S1, False) div3 S1 _ = (S2, False) div3 S2 _ = (S0, True)  topEntity :: Signal Bool -&gt; Signal Bool topEntity = mealy div3 S0 <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 VHDL<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"vhdl\">-- Automatically generated VHDL-93 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; use IEEE.MATH_REAL.ALL; use std.textio.all; use work.all; use work.div3mealy_types.all;  entity div3mealy_mealy is   port(w2              : in boolean;        -- clock        system1000      : in std_logic;        -- asynchronous reset: active low        system1000_rstn : in std_logic;        result          : out boolean); end;  architecture structural of div3mealy_mealy is   signal y         : boolean;   signal result_0  : div3mealy_types.tup2;   signal x         : unsigned(1 downto 0);   signal x_app_arg : unsigned(1 downto 0);   signal x_0       : unsigned(1 downto 0); begin   result &lt;= y;    y &lt;= result_0.tup2_sel1;    with (x) select     result_0 &lt;= (tup2_sel0 =&gt; to_unsigned(1                                          ,2)                 ,tup2_sel1 =&gt; false) when &quot;00&quot;,                 (tup2_sel0 =&gt; to_unsigned(2,2)                 ,tup2_sel1 =&gt; false) when &quot;01&quot;,                 (tup2_sel0 =&gt; to_unsigned(0,2)                 ,tup2_sel1 =&gt; true) when others;    -- register begin   div3mealy_mealy_register : process(system1000,system1000_rstn)   begin     if system1000_rstn = '0' then       x &lt;= to_unsigned(0,2);     elsif rising_edge(system1000) then       x &lt;= x_app_arg;     end if;   end process;   -- register end    x_app_arg &lt;= x_0;    x_0 &lt;= result_0.tup2_sel0; end;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412 Clash \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043d\u0438\u043c\u0438. \u0414\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u0444\u0430\u0439\u043b (\u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0432 REPL) \u0441\u0442\u0440\u043e\u0447\u043a\u0443 <\/p>\n<pre><code class=\"haskell\">import qualified Data.List as L<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abL.\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <\/p>\n<pre><code>*DIV3Mealy L&gt; L.scanl (+) 0 [1,2,3,4] [0,1,3,6,10]<\/code><\/pre>\n<p>  \u0421 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.  <\/p>\n<pre><code>*DIV3Mealy L&gt; scanl (+) 0 (1 :&gt; 2 :&gt; 3 :&gt; 4 :&gt; Nil) &lt;0,1,3,6,10&gt; *DIV3Mealy L&gt; scanl (+) 0 $(v [1,2,3,4]) &lt;0,1,3,6,10&gt;<\/code><\/pre>\n<p>  \u041d\u043e \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439, \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a <a href=\"http:\/\/hackage.haskell.org\/package\/clash-prelude-0.10.14\/docs\/CLaSH-Sized-Vector.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<br \/>  \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/hackage.haskell.org\/package\/clash-prelude-0.10.14\/docs\/CLaSH-Tutorial.html\">\u0437\u0434\u0435\u0441\u044c<\/a>.<br \/>  \u041d\u0430 <a href=\"http:\/\/www.clash-lang.org\/\">\u0441\u0430\u0439\u0442\u0435<\/a> \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Clash, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"https:\/\/github.com\/polygonhell\/Clash6502\">\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 6502<\/a>.<\/p>\n<h1>\u041f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u044b<\/h1>\n<p>  Haskell \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u0438 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 DSL, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439, \u043a\u0440\u043e\u043c\u0435 HDL, \u0435\u0449\u0435 \u0438 \u0447\u0435\u0440\u0435\u0437 <a href=\"http:\/\/ivorylang.org\">Ivory<\/a> \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0438 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438), \u0438\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b (\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 LLVM backend, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b).<\/p>\n<p>  \u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0435\u043c, \u0432\u044b\u0440\u0430\u0436\u0430\u044e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c <a href=\"https:\/\/habrahabr.ru\/users\/yuripanchul\/\" class=\"user_link\">yuripanchul<\/a> \u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437\u0434\u0430\u043d\u0438\u044f \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u00ab\u0426\u0438\u0444\u0440\u043e\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u044e, \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043f\u043e\u0434\u0432\u0438\u0433 \u043c\u0435\u043d\u044f \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<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:\/\/habrahabr.ru\/post\/316748\/\"> https:\/\/habrahabr.ru\/post\/316748\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" height=\"30%\" width=\"30%\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8ac\/905\/f32\/8ac905f32d6903fc5e776604455b6577.png\" align=\"left\"\/>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0445\u043e\u0442\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 C (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e) <a href=\"http:\/\/ivorylang.org\">Ivory<\/a>, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <a href=\"https:\/\/github.com\/frp-arduino\/frp-arduino\">\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Arduino<\/a>, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 <a href=\"https:\/\/github.com\/tomahawkins\/atom\">Atom<\/a>, <a href=\"https:\/\/haskellembedded.github.io\/\">Ion<\/a><\/div>\n<\/div>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043d\u0438\u0436\u0435, \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u0442\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0424\u041f \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438. \u0412\u0435\u0434\u044c \u0431\u043b\u043e\u043a \u043a\u043e\u043c\u0431\u0438\u0442\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u0432\u0435\u043b\u0438\u0447\u0438\u043d \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445, \u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0442\u0430\u0440\u043e\u0435 \u0438 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-282271","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/282271","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=282271"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/282271\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=282271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=282271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=282271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}