суббота, 8 августа 2009 г.

Символьные вычисления

Если вы интересовались языком Lisp, то наверняка читали, что он был придуман для символьной обработки данных. Я такое тоже читал, но долго не мог понять, что же всё таки скрывается за этим загадочным термином "символьные вычисления". Однако, там же, где упоминается данная область применений Lisp, обычно есть подсказка в виде какой-либо версии вычислителя s-выражений (калькулятора), плюс, вы могли слышать (знать/пользоваться) о замечательной системе символьных алгебраических вычислений Maxima, которую часто приводят в качестве примера системы, реализованной на Common Lisp. Всё это невольно подталкивает к мысли, что "символьные вычисления" имеют какое-то отношение к алгебре, s-выражениям (что за зверь?) или "типо того", этим возможно занимаются какие-то безумные учёные из NASA, но это, совершенно точно, не имеет никакого отношения к базам данных, веб-страницам, и прочим вещам, за которые вам на самом деле платят деньги. Ну, не знаю как вы, а я думал так.

Однако, не смотря на то, что я так думал, я всё равно занимался изучением Common Lisp, ибо он обладает целым набором замечательных свойств (перечислять не буду). И вот, по мере изучения Common Lisp я вдруг стал понимать, что "символьные вычисления" это совершенно нечто иное и лучше бы мне не показывали этот самый вычислитель s-выражений и не рассказывали про Maxima: может тогда бы я осознал силу и пользу "символьных вычислений" гораздо раньше.

Вообще-то, я на самом деле не знаю, какой смысл вкладывали в "символьные вычисления" те самые первые "отцы-основатели", но я осознаю, что данный термин был сильно "дискредитирован" многочисленным авторами статей "лисп-для-чайников", которые использовали его совершенно не понимая, что же это всё таки такое и что-бы восстановить утраченный смысл надо обращаться к статьям этих самых "отцов-основателей", но подобная работа не для меня :) На да бог с ними, я вижу (пусть даже и не всё) и могу попробовать рассказать, что же из себя представляют "символьные вычисления" в современном Common Lisp.

В Common Lisp символы - это фундаментальный тип данных, для которого существую мощный API, являющийся результатом 50-ти лет развития. Т.е. я трактую обсуждаемый термин весьма прямолинейно, как операции над символами в терминах Common Lisp. И это имеет отношение и к базам данных, и к веб-страницами и вообще, к очень многому, ибо "символьные вычисления" оказываются весьма полезными при решения самых разнообразных задач. Конечно, в символах нет "джина", который выскочит и порешает все ваши проблемы, и да, их можно заменить какими-нибудь строками или "типа того", и возможно вы сейчас так и делаете (на какой-нибудь Java), или делали раньше, но это типичное "велосипедостротильство", со всем его недостатками.

Вряд ли у вас прибавилось понимания "символьных вычислений" :), для этого нужно много практических примеров и я собираюсь написать статью об использовании "символьных вычислений" при разработке web-приложений и выложить её на lisper.ru. Правда, вряд ли это будет раньше, чем через пару месяцев.

P.S. Широко распространено заблуждение, что самой-самой главной фичей Common Lisp являются макросы. Это не так. Макросы это замечательно, но это не "самая главная фича" (такой просто нет). Но, между прочим, макросы возможны в том числе потому, что CL поддерживает символьные вычисления.

Комментариев нет:

Отправить комментарий