Lisp: маленький гигант::Журнал СА 06.2016
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6188
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6898
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4181
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2986
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3791
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3802
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6296
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3150
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3445
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7261
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10627
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12348
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13979
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9109
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7063
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5373
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4603
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3412
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3142
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3388
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3010
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Lisp: маленький гигант

Архив номеров / 2016 / Выпуск №6 (163) / Lisp: маленький гигант

Рубрика: Разработка /  Истоки программирования

Алексей Вторников АЛЕКСЕЙ ВТОРНИКОВ, ЗАО КБ «Ростовский Универсальный», ведущий программист, pdp8dec@gmail.com

Lisp: маленький гигант

Красота – неточное понятие. Но мы, по счастью, все же способны разглядеть истинную красоту, пусть даже в абстрактных идеях. Эта статья о языке программирования, который стал стартовой точкой целого направления в информатике, известного сегодня как функциональное программирование

Курица – это способ, которым яйцо создает другое яйцо.

Сэмюэл Джонсон

Истоки

В апреле 1960 года в журнале Communications of the Association for Computing Machinery (более известном как CACM) была опубликована 12-страничная статья «Recursive Functions of Symbolic Expressions and Their Computation by Machine. Part I» (часть II так никогда и не появилась). Автором статьи был математик Джон Маккарти, работавший вМассачусетском технологическом институте (Кембридж, США). В статье автор рассказал об итогах своей работы над новым языком для программирования искусственного интеллекта (кстати, именно Маккарти и был автором термина «искусственный интеллект», который в наши дни обезобразили до неудобоваримого «искин»). Справедливости ради нужно сразу же отметить, что Маккарти, являясь, безусловно, главным автором идеи, трудился не в одиночку: у него была небольшая лаборатория, в работе которой активное участие принимали его студенты, участвовавшие в реализации языка и предложившие ряд ценных нововведений.

Структурно статья разделена на три части. В первой части описываются математические формализмы, положенные Маккарти в основу языка (рекурсивные функции и λ-исчисление, разработанное за 20 лет до этого Алонзо Черчем).

Во второй части автор вводит т.н. S-выражения, служащие одновременно и для представления данных и для представления программ, написанных на этом языке. Здесь же вводятся основные операции над S-выражениями и описывается связь S-выражений с формализмами из предыдущей части статьи.

Наконец, в последней части статьи описывается собственно сам язык (по состоянию на февраль 1960 года).

Эта статья и описанный в ней язык стали стартовой точкой целого направления в информатике, известного сегодня как функциональное программирование. Имя языка должно быть известно всякому, кто претендует на звание профессионала, – это, конечно же, Lisp.

Замечание. Этимология названия языка забавна. Сам Маккарти образовал его из слов «LISt Processing», т.е. «обработка списков». Разумеется, это и есть официальное его название. Однако в английском языке слово «lisp» означает «шепелявить», «сюсюкать», что, конечно, послужило поводом для многочисленных, хотя и безобидных, шуток. Но есть еще одна и, надо признать, довольно едкая расшифровка «Lots of Irritating Superfluous Parentheses», т.е. «множество раздражающих лишних скобок» (слово «irritating» нередко заменялось куда более грубым «idiotic»). Причина столь резких нападок на скобки объясняется тем, что в программах на Lisp количество скобок непривычно велико по сравнению с традиционными языками программирования. На первых порах это действительно может раздражать, но очень скоро вы начинаете это ценить: скобки придают программам на Lisp особый стиль, удивительно ясный синтаксис и своеобразный интеллектуальный «аромат».

Значимость Lisp хорошо иллюстрируется хотя бы тем, что он второй (после Fortran) по возрасту активно используемый язык программирования. Подавляющее большинство языков, появившихся в те или даже в более поздние годы, давно и надежно забыты (например, Algol или PL/1). А вот Lisp жив и не просто жив, а еще и весьма «плодовит» – он явился предтечей множества языков программирования, порой на него совершенно не похожих. Более того, многие концепции Lisp были заимствованы не родственными ему языками (например, замыкания, динамическая типизация, каррирование, сборка мусора, анонимные функции). Lisp как никакой другой язык обогатил информатику. С него и с его помощью начались интенсивные исследования семантики (смысла и значения) языков программирования. Даже если вы не будете использовать Lisp в практической деятельности, то все равно полезно хотя бы поверхностно с ним ознакомиться. Но для начала – несколько слов об авторе Lisp.

Об авторе Lisp

Джон Маккарти родился в 1927 году в Бостоне в семье, далекой от математики: его отец был профсоюзным деятелем, мать – журналисткой. У мальчика рано проявились недюжинные математические способности. Будучи еще школьником, Джон приобрел университетские учебники и задачники, самостоятельно их изучил и перерешал все задачи, чтопозволило ему пропустить первые два курса по математике после поступления в Калифорнийский технологический институт (семья к этому времени переехала в Калифорнию). После недолгой военной службы он закончил обучение и многие годы занимался исследовательской работой и преподаванием в ряде ведущих американских университетов (причем в последнем из них – Стэнфордском – он проработал до 2000 года, вплоть до выхода на пенсию).

Математик Джон Маккарти
Математик Джон Маккарти

Как и многие незаурядные личности, Джон Маккарти отличался некоторой чудаковатостью и даже эксцентричностью (вот, например, его ответ активистам по вопросам экологии: «Мое хобби – не посещать мероприятий в поддержку переработки отходов; это экономит больше энергии, чем ваше увлечение этой переработкой»). В молодости он даже увлекался идеями коммунизма (скорее всего под влиянием родителей), но довольно быстро к этому охладел. В зрелом возрасте, как он сам говорил, «для разнообразия» прыгал с парашютом ивзбирался на горы. Не считал нужным слишком заботиться о приличиях: мог оборвать собеседника на полуслове, развернуться и уйти. Был убежденным пацифистом и вообще сторонником либеральных взглядов; призывал к немедленному окончанию войны во Вьетнаме.

В 1971 году Джон Маккарти был удостоен самой престижной премии в области информатики – премии Тьюринга (с Аланом Тьюрингом, кстати, он был лично знаком). Еготрадиционная лекция на церемонии вручения премии была опубликована (после существенной переработки первоначального варианта) только в 1986 году, но достойна того, чтобы ознакомиться с ней. В ней Маккарти честно и открыто рассказывает о сложностях, возникших при попытках создания искусственного интеллекта (далее – ИИ), и признает, что«системы искусственного интеллекта страдают отсутствием общности». Кроме того, «никто не знает, как создать базу данных, содержащую общеполезные знания об окружающем мире (знания «здравого смысла»), которую могла бы использовать любая программа, нуждающаяся в этих знаниях». Хотя с той поры прошло уже 30 лет, вопросы, поднятые Маккарти продолжают оставаться актуальными.

Кроме премии Тьюринга, Джон Маккарти был удостоен и ряда других престижных научных наград.

Джон Маккарти сотрудничал с советскими математиками, а с А.П. Ершовым (1931-1988) состоял в многолетней переписке и личной дружбе; он неоднократно посещал Советский Союз с лекциями и участвовал в работе ряда проводившихся в СССР конференций и семинаров.

Умер Джон Маккарти в сентябре 2011 года в возрасте 84 лет. Новость о его смерти стала распространяться только спустя несколько дней. Увы, так часто бывает: уход из жизни человека, создавшего одно из самых важных, продуктивных и полезных направлений в программировании, прошел практически незамеченным. Но наследие, оставленное Маккарти, продолжает жить и развиваться. Более того, все свидетельствует о том, что роль функционального программирования будет только расти. Джон Маккарти сам, своими трудами иидеями, создал себе памятник.

Шапочное знакомство с Lisp

Для решения сложных задач, которыми всю жизнь и занимался Джон Маккарти, нужны сильные инструменты. Давайте познакомимся с основными концепциями Lisp: именно здесь лежат все основные идеи. При этом мы будем ориентироваться на ANSI Common Lisp (часто используется сокращение «CL») – самую, пожалуй, распространенную версию языка. Но это не должно служить препятствием к изучению других реализаций (и прежде всего Scheme) – основные принципы остаются неизменными.

Замечание. Справедливости ради необходимо отметить, что первым языком программирования, специально разработанным для решения задач ИИ, был язык IPL (Information Processing Language), сознанный в 1956 году А. Ньюэллом, К. Шоу и Г. Саймоном из RAND Corporation и Института Карнеги. IPL – это своего рода ассемблер для символьных вычислений. Мы не будем сейчас на нем останавливаться, но надо упомянуть, что IPL оказался удачной разработкой. На IPL был реализован ряд проектов ИИ (игра в шашки, первая экспертная система, программа для доказательства теорем и ряд других). Lisp испытал сильное влияние IPL (особенно в том, что касалось представления структур данных), ноМаккарти в конечном счете выбрал иной путь; в итоге Lisp быстро вытеснил IPL, о котором сейчас почти никто не вспоминает (и, откровенно говоря, напрасно).

Идея S-выражений очень проста, но, чтобы увидеть за этой простотой истинные возможности, нужно, чтобы появился гений.

Название S-выражение происходит от symbol expression, что можно перевести как «символьное выражение». S-выражение – это всего лишь способ (или форма) записи данных ипрограмм. S-выражения состоят из данных двух типов – атомов и списков.

Атом – это либо число (например, 127, -88 или 3.1415926), либо алфавитно-цифровой символ (например, A, СОБАКА или B52), либо строка (последовательность символов, ограниченная кавычками, например, «Hello World»). Обратите внимание, что понятие символа в Lisp отличается от такового в Java или C, где символ – это действительно одиночный знак, например, 'A' или '*'.

Список – это структура данных, состоящая из атомов и других списков (они называются подсписками или вложенными списками), разделенных пробелами и ограниченных скобками. Несколько примеров дадут достаточное представление о списках:

(У ПОПА БЫЛА СОБАКА)

(У (ПОПА (БЫЛА (СОБАКА)))

(ПАПА ВАСЯ 35 МАМА Лена 30 СЫН МИША 8)

((ПАПА ВАСЯ 35)(МАМА ЛЕНА 30)(СЫН МИША 8))

()

Статью целиком читайте в журнале «Системный администратор», №06 за 2016 г. на страницах 64-69.

PDF-версию данного номера можно приобрести в нашем магазине.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru