Лисп: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
м Правки Kgvklhjul (обсуждение) откачены к версии 89.232.105.200
ПРЯЧУ КРАСНОТУ ДО ЛУЧШИХ ВРЕМЕН
Строка 3: Строка 3:
__NOEDITSECTION__
__NOEDITSECTION__
<div style="max-width:52em;margin:1em auto 0 4%;">
<div style="max-width:52em;margin:1em auto 0 4%;">
<span style="margin-left:-0.1em"><big>Лисп</big></span>&nbsp;полон&nbsp;выгодных&nbsp;особенностей. Он&nbsp;— старейший из&nbsp;ныне&nbsp;живущих языков программирования.<ref>Ибо [[w:Ассемблер|Ассемблер]] не назовёшь языком программирования, а [[w:Фортран|Фортран]] — ныне живущим языком&nbsp;общего&nbsp;назначения.</ref> Притом по&nbsp;уровню вводимых абстракций и по&nbsp;свободе выражения [[Лисп/Превосходство|Лисп превосходит]] чуть ли не все прочие языки. Например, это также и первый язык [[:Категория:Функциональное программирование|функционального программирования]], хотя все остальные парадигмы, философии и привычки программирования, — включая непопулярные и чисто гипотетические, — он также поддерживает, гибко и эффективно.
<span style="margin-left:-0.1em"><big>Лисп</big></span>&nbsp;полон&nbsp;выгодных&nbsp;особенностей. Он&nbsp;— старейший из&nbsp;ныне&nbsp;живущих языков программирования.<ref>Ибо [[w:Ассемблер|Ассемблер]] не назовёшь языком программирования, а [[w:Фортран|Фортран]] — ныне живущим языком&nbsp;общего&nbsp;назначения.</ref> Притом по&nbsp;уровню вводимых абстракций и по&nbsp;свободе выражения Лисп превосходит чуть ли не все прочие языки. Например, это также и первый язык [[:Категория:Функциональное программирование|функционального программирования]], хотя все остальные парадигмы, философии и привычки программирования, — включая непопулярные и чисто гипотетические, — он также поддерживает, гибко и эффективно.


<span style="margin-left:-0.1em">Дело</span> в том, что лисповый код…
<span style="margin-left:-0.1em">Дело</span> в том, что лисповый код…
Строка 12: Строка 12:
<span style="margin-left:-0.6em">…представляется</span> простой и удобной структурой данных — списком (точнее, одно[[w:Связный список|связным списком]], стало быть [[w:Дерево (теория графов)|деревом]]), где всевозможные составные части программы: числа, [[Лисп/Текст|текст]], имена переменных, [[Лисп/Функции|функции]], [[Лисп/Спецоператоры|особые операторы]]… — абстрагируются до общего понятия [[Лисп/Символы|''символа'']]. А ведь Лисп на короткой ноге со всевозможными [[Лисп/Структуры данных|структурами данных]]. Вот и получается, что [[Лисп/Метапрограммирование|метапрограммирование]] — в&nbsp;самой&nbsp;основе&nbsp;этого языка. Но и не только оно, разумеется.
<span style="margin-left:-0.6em">…представляется</span> простой и удобной структурой данных — списком (точнее, одно[[w:Связный список|связным списком]], стало быть [[w:Дерево (теория графов)|деревом]]), где всевозможные составные части программы: числа, [[Лисп/Текст|текст]], имена переменных, [[Лисп/Функции|функции]], [[Лисп/Спецоператоры|особые операторы]]… — абстрагируются до общего понятия [[Лисп/Символы|''символа'']]. А ведь Лисп на короткой ноге со всевозможными [[Лисп/Структуры данных|структурами данных]]. Вот и получается, что [[Лисп/Метапрограммирование|метапрограммирование]] — в&nbsp;самой&nbsp;основе&nbsp;этого языка. Но и не только оно, разумеется.


Здесь мы намерены научить читателя программировать на Лиспе, хотя бы в одном из его [[Лисп/Диалекты|диалектов]]. Ответственный подход к этой задаче требует (перед изучением языка или же одновременно) изучение искусства программирования как такового, — дело многих лет академического занятия, чтения и практики. Притом, независимо от наличия навыка программирования на иных языках, начинающему лиспнику нужно изучать много нового, порою старательно отвыкая от привычных ограничений, дабы окунуться в бездонную многомерность «программируемого языка программирования»… Задача перед нами гигантская.
Здесь мы намерены научить читателя программировать на Лиспе, хотя бы в одном из его [[Лисп/Диалекты|диалектов]]. Ответственный подход к этой задаче требует (перед изучением языка или же одновременно) изучение искусства программирования как такового, — дело многих лет академического занятия, чтения и практики. Притом, независимо от наличия навыка программирования на иных языках, начинающему лиспнику нужно изучать много нового, порою старательно отвыкая от привычных ограничений, «непрограммируемых языков программирования»… Задача перед нами гигантская.


<span style="margin-left:-0.1em">О</span>днако, Лисп заслужил всестороннего внимания величайших мыслителей информатики и компьютерной технологии, и нам остаётся лишь попытаться вскарабкаться на плечи гигантов, — хотя бы в дидактическом плане, — уместно ссылаясь на избранную [[Лисп/Литература|литературу о Лиспе]], часто общедоступную по Сети. Ясно также, что кратчайший путь к поставленной нами цели не единственен, а расходится по локальным оптимумам для разных людей с разными задачами. Здесь нам опять повезло: перед вами — [[Викиучебник:Введение|'''вики'''учебник]], а это больше, чем просто учебник в свободном доступе: это домашняя страница <big>открытой школы Лиспа</big>, где каждый может быть слушателем или добавить к экспертизе преподавателей.<ref>Изучите [[Справка|справку]] по сайту Викиучебник, освойтесь с [[вики]]-средой, общайтесь с читателями и соавторами (<code>[[Обсуждение:Лисп]]</code>, <code>[[Обсуждение:Лисп/Типы данных]]</code> и так далее.) Проект [[Вики в образовании]] даёт общий взгляд на такой способ открытого сетевого обучения.</ref>
<span style="margin-left:-0.1em">О</span>днако, Лисп заслужил всестороннего внимания величайших мыслителей информатики и компьютерной технологии, и нам остаётся лишь попытаться вскарабкаться на плечи гигантов, — хотя бы в дидактическом плане, — уместно ссылаясь на избранную [[Лисп/Литература|литературу о Лиспе]], часто общедоступную по Сети. Ясно также, что кратчайший путь к поставленной нами цели не единственен, а расплетается по локальным оптимумам для разных вычислительных применений компьютера. Здесь нам опять повезло: перед вами — [[Викиучебник:Введение|'''вики'''учебник]], а это больше, чем просто учебник в свободном доступе: это домашняя страница <big>открытой школы</big>, где каждый может быть слушателем или добавить к экспертизе преподавателей.<ref>Изучите [[Справка|справку]] по сайту Викиучебник, освойтесь с [[вики]]-средой, общайтесь с читателями и соавторами (<code>[[Обсуждение:Лисп]]</code>, <code>[[Обсуждение:Лисп/Типы данных]]</code> и так далее.) Проект [[Вики в образовании]] даёт общий взгляд на такой способ открытого сетевого обучения.</ref>


Пока же учебник только начат, и для средоточения наших усилий положим такое требование читателю: знание Лиспа Вам нужно для решения некоей сложной задачи, либо определённого класса задач. Вы — не языковед, из любопытства знакомящийся с программистской латынью, а деловой человек, нуждающий верно, точно и красиво излагать на языке творческие мысли. В толстый академико-промышленный справочник по отдельному диалекту вы заглянете лишь изредка, за объяснением выражения, непонятного из контекста. Наш учебник постремится избегать такие неясности добавлением всё новых уроков и уместными ссылками на литературу. Совершенствованию помогут, опять-таки, ваши отзывы и замечания.</div>
Пока же учебник не начат, и для средоточения наших усилий положим такое требование читателю: знание Лиспа Вам нужно для решения некоей сложной задачи, либо определённого класса задач. Вы — не языковед, из любопытства знакомящийся с программистской латынью, а деловой человек, нуждающий верно, точно и красиво излагать на языке творческие мысли. В толстый академико-промышленный справочник по отдельному диалекту вы заглянете лишь изредка, за объяснением выражения, непонятного из контекста. Наш учебник постремится избегать такие неясности добавлением всё новых уроков и уместными ссылками на литературу. Совершенствованию помогут, опять-таки, ваши отзывы и замечания.</div>
==Содержание==
==Содержание==
<div style="max-width:52em;margin:2em auto 0 4%;padding-left:0.1em;"><small>''([[(несуществующая страница)|Красным]] — даже не начатое.)''</small>
<div style="max-width:52em;margin:2em auto 0 4%;padding-left:0.1em;"><small>''([[(несуществующая страница)|Красным]] — даже не начатое.)''</small>
Строка 24: Строка 24:
*[[Лисп/Введение|Введение]]<small> в наш порядок изучения</small>
*[[Лисп/Введение|Введение]]<small> в наш порядок изучения</small>


===Элементы===
===Основы===
*[[Лисп/Синтаксис|Синтаксис]]
*[[Лисп/Синтаксис|Синтаксис]]
*[[Лисп/Символы|Символы]] и символьное исчисление
*[[Лисп/Типы данных|Типы данных]]
*[[Лисп/Типы данных|Типы данных]]
*[[Лисп/Функции|Функции]] и функциональный стиль
*[[Лисп/Функции|Функции]] и функциональный стиль
Строка 32: Строка 31:
*:→ [[:Категория:Функциональное программирование|Категория «Функциональное программирование»]]
*:→ [[:Категория:Функциональное программирование|Категория «Функциональное программирование»]]
**[[Лисп/Рекурсия|Рекурсия]]
**[[Лисп/Рекурсия|Рекурсия]]
*[[Лисп/Структуры данных|Структуры данных]]<small>: от последовательностей и структур к сетям и системам</small>
*[[Лисп/Макросы|Макросы]], введение в метапрограммирование
*[[Лисп/Спецоператоры|Спецоператоры]]


===Частности===
===Разности===
*[[Лисп/Обход|Обход]]: итерация и обход сложных структур
*[[Лисп/Текст|Текст]]: обработка, индексация, структурный анализ
*[[Лисп/Чтение|Чтение]] всевозможных источников
*[[Лисп/Служебные подпрограммы|Служебные подпрограммы]] для общих задач
*[[Лисп/Математика|Математика]]
*[[Лисп/Математика|Математика]]
*[[Лисп/Графика|Графика]]
*[[Лисп/Инкапсуляция|Инкапсуляция]] и [[Лисп/Модули|модули]]
**[[newLISP/Контексты|«Контексты»]] языка newLISP
*[[Лисп/Базы данных|Базы данных]]
*[[Лисп/Отложенное вычисление|Отложенное вычисление]]
*[[Лисп/Постоянные объекты|Постоянные объекты]]
*[[Лисп/Библиотеки|Библиотеки]]

===Тонкости===
*[[Лисп/Метапрограммирование|Метапрограммирование]]
*[[Лисп/Поток выполнения|Поток выполения]]
**[[Лисп/Условия и возобновления|Условия и возобновления]]
**[[Лисп/Параллелизм|Паралеллизм]]
*[[Лисп/Оптимизация|Оптимизация]]
*[[Лисп/Оптимизация|Оптимизация]]
*[[Лисп/Амортизация|Амортизация]], [[Лисп/Приспособляющиеся структуры|приспособляющиеся структуры]]
*[[Лисп/Амортизация|Амортизация]], [[Лисп/Приспособляющиеся структуры|приспособляющиеся структуры]]
<!-- КРАСНОТА
*[[Лисп/Общение|Общение]]<small>: от программных интерфейсов к код-генераторам и интерпретаторам</small>
*[[Лисп/Подпрограммы]]<small>: как локализовать эффекты низкоуровневых процедур. Импорт из Си.
*[[Лисп/Низкоуровневое программирование|Низкоуровневое программирование]]
*[[Лисп/Низкоуровневое программирование|Низкоуровневое программирование]]


===Разности===
===Разности===
*[[Аспектно-ориентированное программирование]]<small> (примеры на [[Java]])</small>
*[[Аспектно-ориентированное программирование]]<small> (примеры на [[Java]])</small>-->
*[[Введение в язык Scheme для школьников]]
*[[Введение в язык Scheme для школьников]]
*[[Восходящее программирование]]
*[[Восходящее программирование]]


<!-- ПРЯЧУ КРАСНОТУ ДО ЛУЧШИХ ВРЕМЕН
===Применения===
===Применения===
*[[Лисп/Прототипирование|Прототипирование]]
*[[Лисп/Прототипирование|Прототипирование]]
Строка 74: Строка 55:
*[[Агенты]]
*[[Агенты]]
*[[Лингвоанализ]]: распознание речи и смысла, говороботы
*[[Лингвоанализ]]: распознание речи и смысла, говороботы
*[[Различение образов]] и [[раскопка данных]]
*[[Различение образов]] и [[раскопка данных]]-->
</div>
</div>
==Примечания==
==Примечания==
<div style="max-width:52em;margin:0 auto 0 3%;">
<div style="max-width:52em;margin:0 auto 0 3%;">
<p style="margin-left:1.7em;">0. Сноски в этом учебнике заключают строго необязательное, второстепенное повествование, призванное дать пояснение неочевидным утверждениям или решить возможные вопросы. Если таковых у Вас не возникает — смело пропускайте примечания.</p>
<p style="margin-left:1.7em;">0. Сноски заключают строго необязательное, второстепенное повествование, призванное дать пояснение неочевидным утверждениям или решить возможные вопросы. Если таковых у Вас не возникает — смело пропускайте примечания.</p>
<references />
<references />
</div>
</div>

Версия от 11:07, 6 мая 2011


Лисп полон выгодных особенностей. Он — старейший из ныне живущих языков программирования.[1] Притом по уровню вводимых абстракций и по свободе выражения Лисп превосходит чуть ли не все прочие языки. Например, это также и первый язык функционального программирования, хотя все остальные парадигмы, философии и привычки программирования, — включая непопулярные и чисто гипотетические, — он также поддерживает, гибко и эффективно.

Дело в том, что лисповый код…

(с виду (опять-таки) необычный (весьма)
(из-за
 (кажущегося (на первый взгляд) избыточным)
обилия (круглых) скобок))

…представляется простой и удобной структурой данных — списком (точнее, односвязным списком, стало быть деревом), где всевозможные составные части программы: числа, текст, имена переменных, функции, особые операторы… — абстрагируются до общего понятия символа. А ведь Лисп на короткой ноге со всевозможными структурами данных. Вот и получается, что метапрограммирование — в самой основе этого языка. Но и не только оно, разумеется.

Здесь мы намерены научить читателя программировать на Лиспе, хотя бы в одном из его диалектов. Ответственный подход к этой задаче требует (перед изучением языка или же одновременно) изучение искусства программирования как такового, — дело многих лет академического занятия, чтения и практики. Притом, независимо от наличия навыка программирования на иных языках, начинающему лиспнику нужно изучать много нового, порою старательно отвыкая от привычных ограничений, «непрограммируемых языков программирования»… Задача перед нами гигантская.

Однако, Лисп заслужил всестороннего внимания величайших мыслителей информатики и компьютерной технологии, и нам остаётся лишь попытаться вскарабкаться на плечи гигантов, — хотя бы в дидактическом плане, — уместно ссылаясь на избранную литературу о Лиспе, часто общедоступную по Сети. Ясно также, что кратчайший путь к поставленной нами цели не единственен, а расплетается по локальным оптимумам для разных вычислительных применений компьютера. Здесь нам опять повезло: перед вами — викиучебник, а это больше, чем просто учебник в свободном доступе: это домашняя страница открытой школы, где каждый может быть слушателем или добавить к экспертизе преподавателей.[2]

Пока же учебник не начат, и для средоточения наших усилий положим такое требование читателю: знание Лиспа Вам нужно для решения некоей сложной задачи, либо определённого класса задач. Вы — не языковед, из любопытства знакомящийся с программистской латынью, а деловой человек, нуждающий верно, точно и красиво излагать на языке творческие мысли. В толстый академико-промышленный справочник по отдельному диалекту вы заглянете лишь изредка, за объяснением выражения, непонятного из контекста. Наш учебник постремится избегать такие неясности добавлением всё новых уроков и уместными ссылками на литературу. Совершенствованию помогут, опять-таки, ваши отзывы и замечания.

Содержание

(Красным — даже не начатое.)

Основы

Разности

Примечания

0. Сноски заключают строго необязательное, второстепенное повествование, призванное дать пояснение неочевидным утверждениям или решить возможные вопросы. Если таковых у Вас не возникает — смело пропускайте примечания.

  1. Ибо Ассемблер не назовёшь языком программирования, а Фортран — ныне живущим языком общего назначения.
  2. Изучите справку по сайту Викиучебник, освойтесь с вики-средой, общайтесь с читателями и соавторами (Обсуждение:Лисп, Обсуждение:Лисп/Типы данных и так далее.) Проект Вики в образовании даёт общий взгляд на такой способ открытого сетевого обучения.