Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
...
....
(response
(items
(item ...)
...))
[:html [:body :bgcolor "green" [:div ... ] ... ]] (Clojure). <response>
<items>
<item>
....
</item>
...
</items>
</response>
{ehtml, {html, [], [{body, [{bgcolor, "green"}], [{div, [], ...}]
}]
}}
процедурный
^
|
императивный <-----+------> декларативный
|
v
функциональный
(setf (find-class class-name)
(make-instance metaclass-metaobject
:name class-name
:direct-superclasses (list superclass1-metaobject
superclass2-metaobject ...)))
(defclass class-name (superclass1 superclass2 ...)
(...)
(:metaclass metaclass-name))
Нет. Но дело в том, что к хаскелю они имеют весьма отдаленное отношение.
Сама по себе статическая типизация этого не гарантирует.
Я не вижу там ссылок на то, что статическая типизация помогает отловить такие ошибки.
тупым хиндли-милнером
Статическая типизация не предотвращает от ошибок сложнее «случайно складываем слонов с китами», она не спасает от опечаток, не нарушающих типизацию, она не спасает от ошибок в логике, а последних двух типов ошибок — большинство.
Но по сравнению с CL — ни в коем случае. Вы просто не пробовали разрабатывать код на CL(это видно по неправильному устаревшему написанию «LISP»), в SLIME, например — ни один статический язык с ним по удобству разработки, отладки и тестирования не сравнится.
Об этом гораздо лучше можно догадаться по имени функции и прикрепленному докстрингу, подробно описывающему назначение функции и ее аргументов.
А когда у нас динамическая типизация, ее просто изначально нет.
У меня есть небольшой примерчик, как легко и просто в Хаскелле можно определить алгебраические структуры, вроде кольца, с помощью typeclass'ов. Я уж молчу про то, что всё это можно применить, например, к тестированию программ. Я как раз пишу дипломную работу на эту тему ^_~
Несколько причин освоить CL даже если вы не планируете писать на нем в будущем