Лисп/Историософия: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 49:
<span style="margin-left:-0.1em">Частный</span> аспект этого нового способа назван «восходящим программированием» (по-английски — ''bottom-up'' programming<ref name="bottom-up">Статья [http://www.paulgraham.com/progbot.html Programming Bottom Up] на английском; часть книги «On Lisp».</ref> — «программирование со дна вверх»). Вообще-то любая программа составляется и «снизу», и «сверху», — если она, конечно, написана не прямо на автокоде. Программист на Фортране/Алголе/Си++/Джаве «восходит» по лестнице концептуальной сложности программы всякий раз, когда пишет библиотеку. Но целую программу не создашь на одних библиотеках, да и ограничения языка вскоре дают о себе знать. Так программист встаёт на более традиционный путь «нисходящего программирования»: начиная с наиболее общего взгляда на проектируемую систему, мысленно дробит её на такие части, какие легче всего представить средствами данного языка и существующими библиотеками.
 
<span style="margin-left:-0.1em">Лисп</span> же, будучи усвоен программистом, не торопит навязывать свои структуры и процедуры, а даёт все приспособления для творения новых, — творения, фактически, собственного языка. Опять же, библиотечные функции и классы делают подобное в других языках. Но Лисп идёт намного дальше, позволяя создавать ''«библиотечное что-угодно»'': не только функции или классы, а любую абстракцию вычислительных процессов и структур данных. Например, КЛОС — система классового программирования в ОбщемCommon ЛиспеLisp, — это лишь набор макросов. Это равно что на каком-нибудь Си-шарпеC# написать библиотеку… например, логического программирования. А вот на Лиспе целая реализация Пролога вместилась в 180 неторопливых строк.<ref name="onlisp">(англ.) [http://www.paulgraham.com/onlisptext.html Paul Graham, ''On Lisp'', ISBN 0130305529]</ref>
 
<span style="margin-left:-0.1em">Так</span>, Лисп позволяет программировать эффективнейшим способом: создать удобный набор понятий и составить из них решение вычислительной задачи. Или же наоборот: разделить задачу на систему более простых понятий, (и не обязательно только «модулей», «структур», «процедур», «объектов»,) а затем без особых ограничений реализовать те понятия и взаимосвязи между ними.