globalf5-240972240972 (850810), страница 3
Текст из файла (страница 3)
Выразительная сила Лиспа обретает новоедыхание на каждом эволюционном витке развития информационныхтехнологий. При сравнительном анализе информационных системмоделирование их семантики на Лиспе позволяет классифицироватьфункционирование по уровню сложности, зрелости, полноты, точностии организованности. Универсальность Лиспа достаточна для изученияна его основе любой парадигмы информатики и программотехники.Можно сказать, что Лисп содержит в себе эталонную семантическуюсистему, пригодную для измерения функциональности других систем.Информационный мир становится все более динамичным — Лиспприспособлен к программированию развивающихся построений иреорганизуемых конфигураций из разносортных компонентов.
Многиереализационные находки Лиспа, такие как ссылочная организацияпамяти, "сборка мусора" для повторного использования памяти,частичная компиляция программ с интерпретацией промежуточногокода, полиморфизм, длительное хранение атрибутов объектов в периодих использования и т.д. перекочевали из области исследований иэкспериментов на базе Лиспа в практику реализации операционныхсистем и систем программирования.Общеизвестно, что Лисп — язык искусственного интеллекта иисследования наукоемких и новых направлений информационнойобработки. Но этим влияние Лиспа не ограничено. Диалекты Лиспа(Logo, ML, MuLisp, Scheme, Hope, AutoLisp, CommonLisp, Reduce и др.)заняли обширную нишу в области учебно-экспериментальногопрограммирования , связанного с развитием теории программирования,системного программирования, разработки и прототипирования новыхкомпьютерных комплексов и архитектур, конструирования иисследования систем построения оптимизирующих компиляторов иорганизации особо точных и высокопроизводительных вычислений.12Л.В.
ГородняяОсновы функционального программированияМногообразие откликов на Лисп не случайно. На первый взгляд, идеиЛиспа противоречат традиционным подходам к программированию. Ноэто противоречие отступает перед строгой логикой языка, гармоничноуравновешенной полнотой и ясностью реализационных решений.Определение Лиспа дает гибкую основу для развития, варьирования ирасширения Лисп-систем средствами как самого Лиспа, так и егоокружения. Объем такого определения не превышает одной страницы.Понятийная картина Лиспа — удобный инструмент, помогающийпредставлять решения задач в оптимально универсальной форме,свободной от пресса как преждевременной конкретизации типовданных, так и избыточного обобщения алгоритмов при компиляциипрограмм.
На Лиспе решение задачи может быть выражено в терминахпостановки задачи без привлечения реализационных сущностей ивнешних интерфейсных эффектов.Базис Лиспа предельно лаконичен — атомы и структуры из простейшихбинарных узлов плюс несколько базовых функций и функционалов .Базис содержит встроенные (примитивные) функции, которыеанализируют, строят и разбирают любые структурные значения ( atom,eq, cons, car, cdr ), и встроенные специальные функции ифункционалы,которыеуправляютобработкойструктур,представляющих вычисляемые выражения ( quote, cond, lambda,label, eval ).
Над базисом строятся предельно простые формулы ввиде круглоскобочных списков, где первый элемент — функция,остальные — ее аргументы, в том числе переменные, реализуемые спомощью разных вариантов стека или ассоциативного списка. Всеостальные механизмы вычисления и преобразования формул могутсводиться к этому базису, рассматриваться как его вариант илирасширение. Такой лаконизм сродни алгебре, способствующейпроявлению общих закономерностей в работе с формулами надобъектами разной природы. Подробнее с идеями Лиспа и егоматематическими основами можно ознакомиться на страницах журнала"Компьютерные инструменты в образовании", № 2–5 за 2002 год.Синтаксис Лиспа не требует особых ресурсов для запоминанияразделителей и/или ограничителей и напряженного внимания нараспознавание синтаксических позиций в разных рамочныхконструкциях.
Универсальный разделитель — пробел, ограничители —13Л.В. ГородняяОсновы функционального программированиякруглые скобки. В скобки заключается представление функции с ееаргументами. Все остальное — вариации в зависимости от категориифункций, определенности атомов и вычислимости выражений, типовзначений и структур данных. Функционалы — это одна из категорийфункций, используемая при организации управления вычислениями.Программирование на Лисп нацелено на выделение универсальныхфункций и отображений, композиции которых строятся как формулынад значениями. При таком стиле малые программы над небольшимиобъемами данных не нуждаются в заботе о распределении памяти ипреобразовании информации по конкретным адресам. Новаяинформация размещается в свободной памяти без неявного разрушенияисходных построений.
Высокий уровень представления программ наЛиспе обеспечивает их реальное абстрагирование от оборудования ипрактическую независимость от версии реализации и даже от диалектаязыка. По современным меркам реализации Лиспа компактны и неслишком требовательны к оборудованию. Существуют свободнораспространяемые версии, занимающие менее мегабайта, пригодные кприменению на любом процессоре.В нашей стране программирование мало соприкоснулось с Лиспом, хотязнакомство с языком состоялось из первых рук. Джон Маккарти в конце1968 года познакомил Москву и Новосибирск с Лиспом, что побудило креализации отечественных версий языка. Две реализации на БЭСМ-6(ВЦ АН под рук. С. С. Лаврова [24] и ВЦ СО АН под руководством А.
П.Ершова [25]) и одна на ЕС ЭВМ (ВЦ АН под рук. С. С. Лаврова) нашлиприменение в отечественных проектах по системному и теоретическомупрограммированию, в исследованиях по математической лингвистике,искусственному интеллекту и обработке химических формул.Существовал также проект реализации на Эльбрусе (И.Н. Скопин).В настоящее время наблюдается устойчивый рост рейтингаинтерпретируемых языков программирования и включения вкомпилируемые языки механизмов символьной обработки и средствдинамического анализа, что повышает интерес к Лиспу.
Моделирующаясила Лиспа может послужить основой для очередного кругаисследованийвобластикомпонентногопрограммирования,формализации поведения информационных систем, разработки методовпреобразования и защиты информации, высокопроизводительного14Л.В. ГородняяОсновы функционального программированияпрограммирования для суперкомпьютеров, создания прототипов системдля новых применений.Лисп успешно работает на любом уровне абстрагирования информацииот ассемблера и операционной оболочки до Internet-приложений илингвистических интерфейсов, что подтверждает его звание подлинноуниверсального языка программирования, показавшего стойкуюжизнеспособность и интеллектуальную практичность в широкомспектре применений.История создания и развития языка программирования ЛИСПинтересна как социальный феномен осуществления замысла,вызвавшего серьезные возражения и математиков, и программистов, нопоказавшего удивительную живучесть.
Критика теоретиков быласвязана с так называемой "парадоксальностью" бестипового лямбдаисчисления. Практиков пугали накладные расходы на сборку мусора иинтерпретацию в сравнении с компиляцией и статическимраспределением памяти. (О наличии компилятора в традиционныхЛисп-системах вспоминали редко.)Первоначально предназначенный для символьной обработки, этот языкутвердился в качестве аналога эсперанто для задач искусственногоинтеллекта.
К середине семидесятых годов именно на Лиспе решалисьнаиболее сложные в практике программирования задачи из областидискретнойивычислительнойматематики,системного,экспериментального и теоретического программирования, лингвистики,химии, биологии, медицины и инженерного проектирования.ПримерAutoCAD — система автоматизации инженерных расчетов, дизайна икомплектации изделий из доступного конструктива.Многие созревшие на базе Лиспа решения постепенно обрелисамостоятельность и развиваются как функциональный стильпрограммирования и фреймовый подход к представлению знаний вэкспертных системах.
Семейство диалектов Лиспа включает в себя ужесотни языков, популярность наиболее удачных из них резко возрастаетпри смене парадигм программирования. Приверженцы Лиспа ценят егоза элегантность, гибкость, а, главное, за способность к точномупредставлению программистских идей, удобной отладке и быстромупрототипированию.Основныеизэтихкачествприсущи15Л.В. ГородняяОсновы функционального программированияфункциональному программированию на любом языке. Его идеи,механизмы и принципы могут служить методической итехнологической базой информационной обработки при решениилюбых новых или сложных задач.Возможности языка Лисп наиболее ярко проявились при pешении задачискусственного интеллекта, пионерские решения которых удалисьблагодаря отказу от необоснованных ограничений на спектрэкспериментально-исследовательской работы.
Программная поддержкатаких работ потребовала большого числа нетрадиционных решений исоглашений, основа которых предложена и опробована Дж. Маккарти сего коллегами и учениками в определении языка Лисп и в первыхреализациях Lisp 1.0 и Lisp 1.5 [1]. Наиболее общие из них:1.
Унификация понятий "функция" и "значение".Присимвольномпредставленииинформациинетпринципиальной разницы в природе изображения значений ифункций. Следовательно, нет и препятствий для обработкипредставлений функций теми же средствами, какимиобрабатываются значения, т.е. представления функций можностроить из их частей и даже вычислять по мере поступления иобработки информации. Именно так конструируют программыкомпиляторы. В замкнутых системах не принято к такой техникеинформационныхвоздействийдопускатьобычныхпользователей.
Но исследователь вынужден вникать во всеуровни своего экспериментального полигона.2. Кроме функций-констант,переменные.вполнедопустимыфункции-Отсутствие навыков работы с функциональными переменнымиговорит лишь о том, что надо осваивать такую возможность,потенциал которой может превзойти наши ожидания теперь,когда программирование становится все более аспектно икомпонентно ориентированным. Объектно-ориентированнаяпарадигма вэтом плане не обладает достаточнойфункциональной полнотой.16Л.В. ГородняяОсновы функционального программирования3. Самоприменимость.Первые реализации Лиспа были выполнены методом раскрутки,причем в составе системы сразу были предусмотрены иинтерпретатор, и компилятор.
Оба инструмента были весьматочно описаны на самом Лиспе, причем основной объемописаний не превосходил пару страниц, что позволяло активноиспользовать эти описания при изучении языка и программ,написанных на нем. Этот эксперимент послужил базой дляопределения систем программирования с помощью такназываемой "операционной семантики", получившей развитие вработах по Венской методике определения языков и системпрограммирования [8].4. Интегральность ограничений.Если не хватает памяти, то принципиально на всю задачу, а не наотдельные блоки данных, возможно, не слишком существенныхдля ее решения.
При недостатке памяти специальная программа"мусорщик" пытается найти свободную память. Новые реализацииэтого механизма рационально учитывают преимуществавосходящих процессов на больших объемах памяти.5. Уточняемость решений.Современное применение информационных систем достаточношироко соприкасается с вариантами доступных решений,необходимостью уточнять отдельные особенности примененияготовых решений и трудоемкостью анализа и поискарационального выбора комплекта используемых средств.Реализация Лиспа обычно содержит списки свойств объектов,приспособленные к внешнему доопределению отдельныхэлементов поведения программируемой системы.6. Множественность определений.НаиболееконцептуальнополныйLisp1.5допускаетмножественные определения имен, что в рамках настраиваемойинтерпретацииобеспечиваеткромеобщеизвестногополиморфизма более общие схемы обработки ряда версий или17Л.В.














