globalf5-240972240972 (850810)
Текст из файла
Л.В. ГородняяОсновыпрограммированияфункционального2-е издание, исправленноеГородняя Л.В.Национальный Открытый Университет "ИНТУИТ"20162Л.В. ГородняяОсновы функционального программированияОсновы функционального программирования/ Л.В. Городняя - М.: НациональныйОткрытый Университет "ИНТУИТ", 2016В курсе изложены основы функционального программирования и методы егоприменения при решении сложных задач на стыке искусственного интеллекта исистемного программирования.Студенты познакомятся с основами символьной обработки информации, слабоотраженными в отечественной литературе, а также с эффективными методамипреобразования информации, реализация которых требует многоуровневогообобщения и абстрагирования, что наиболее естественно выражается в терминахфункциональногопрограммирования.Функциональноепрограммированиезарекомендовало себя как гибкая методика с практически неограниченнымивозможностями информационного моделирования, способствующего решению задачисследовательского и технического характера, актуальность которых резко возрастает.Традиционные средства слишком нацелены на кодирование битов-байтов, тогда какосновная работа переместилась на более крупные формирования, такие как системыфайлов, маршрутизация, многоканальный обмен, многопроцессорные комплексы,многоуровневые протоколы и т.п.
Переход к результативной обработке столь сложноустроенных данных требует более глубокого абстрагирования, что может бытьизучено прототипированием в функциональном стиле.Техника функциональногопрограммирования иллюстрируется на языке Лисп, послужившем основой широкогоспектра исследований и прикладных разработок, оказавших существенное влияние нарасширение и распространение компьютерных и информационных технологий, посуществу являющихся ключевыми для анализа и формирования многих сфердеятельности. Изучение языка Лисп является важной составляющей образования вобласти информатики еще и по той причине, что в настоящее время происходит ростпопулярности скриптовых, интерпретируемых языков, для понимания которыхзнакомство с Лиспом и функциональным программированием весьма полезно.
Лисптакже представляет собой ключ и базовую модель для изучения основных задачсистемного программирования и искусственного интеллекта. Именно определениеЛиспа и раскрутку системы программирования на его основе следует рассматриватькак первый полномасштабный эксперимент в области применения функциональногопрограммирования для решения весьма сложной задачи: организацииинструментальной поддержки для исследования и разработки нового класса задачинформационной обработки с высоким уровнем новизны.При отладке примеровиспользован GNU Clisp.Курс предназначен для студентов, интересующихсяперспективами информационных технологий и предпочитающих понимать задачи, скоторыми приходится сталкиваться в разных областях применения информационныхсистем.(c) ООО "ИНТУИТ.РУ", 2004-2016(c) Городняя Л.В., 2004-20163Л.В. ГородняяОсновы функционального программированияОсновные идеиВ этой лекции дается общее представление о функциональномпрограммировании и сфере его применения, включая анализ основныхпонятий и принципов и их иллюстрацию на материале истории языкаЛисп, его диалектов, наследников и реализаций.
Рассматривается рольфункциональных программ в жизненном цикле программногообеспечения и эволюции информационных технологий, а такжеперспективы функционального подхода к совершенствованиюинформационных систем.Общеепредставлениеофункциональномпрограммировании и его примененииИдея функционального программирования опирается на интуитивноепонятие о функциях как о достаточно общем механизме представленияи анализа решений сложных задач. Механизм функций основательноизучен математиками, и это позволяет программистам наследоватьвыверенныепостроения,обладающиепредельновысокоймоделирующейсилой[1].Систематическоеприменениефункционального программирования впервые достаточно ярко былопродемонстрировано Джоном Маккарти и его учениками в методахреализации языка Лисп и программирования на этом языке.
Наиболееочевидные из этих методов были успешно ассимилированы другимиязыками и системами программирования. Обычно про функциональноепрограммирование вспоминают при смене технологий, когда возрастаетроль аналитики и исследовательских задач. В настоящее время частоупотребляют термин "функциональность" при сравнительнойхарактеристике информационных систем, что, видимо, свидетельствуето проявлении новой метрики, заслуживающей отдельногорассмотрения [2].Функциональный стиль объединяет разные подходы к определениюпроцессов вычисления на основе достаточно строгих абстрактныхпонятий и методов символьной обработки данных. Связьфункционального программирования с математическими основамипозволяет в тексте программы наследовать доказательность построениярезультата, если она достигнута, причем с использованием разных4Л.В.
ГородняяОсновы функционального программированияметодов абстрагирования решаемой задачи [2] [3].Сложность решения задач с помощью функциональных определенийпреодолевается чисто алгебраически: нацеленностью на формализациюосновного множества объектов и определения полной семантическойсистемы операций над ними. Это позволяет представлять классы задачи их решений строгими формулами, для наглядности упрощаемымивведением дополнительных функциональных символов. Принеобходимости такие символы вносятся в опpеделение алгебраическойсистемы, что приводит к ее расширению.
Вводятся новые функции,подобные леммам и другим вспомогательным построениям вматематике. Активно используется рекурсия и символьные обозначениякак данных, так и действий и любых формул, удобных при определениифункций.Формально такое расширение является консервативным (новый символопределен с помощью старых), оно гарантирует сохранение всехфункциональных свойств исходной системы. Минимальный наборобозначений, к которым можно свести все правильные, т.е.вычислимые формулы системы, играет роль базиса системы,реализация которого является минимальной версией всей системы.Следует отметить, что при формальной эквивалентности разныерасширения одного и того же базиса могут поддерживать различныеприменения и восприниматься как совершенно разные системы.Программисты вынуждены строить расширения, которые выглядятнеконсервативными, так как целью их работы является именноизменение ряда характеристик функционирования исходной системы(компьютера, системы программирования и т.п.) с частичнымсохранением заданных функциональных свойств.Большинство систем программирования разработано с ориентацией нарасширение, уточнение и настройку пользователем реализованныхпрограммных средств, свойства которых определены и обеспечены впроцессе разработки.
Такое разделение труда естественно приориентации на решение задач с исчерпанным или четко ограниченнымисследовательским компонентом. Но исходная разработка любойсистемы включает фазу формирования базиса и наполнения ядрасистемы в терминах, которые не сводятся к ее языку.
Это позволяет5Л.В. ГородняяОсновы функционального программированиянезависимо рассматривать один еще более общий уровень —аппликативные системы, в которые можно включать любые символы сопределенным смыслом. Поведение такой системы будет обусловленонабором включенных в нее символов.Основная трудность перехода к функциональному программированию— соблазн легкого пути, т.е. стремление быстро смоделироватьпривычные средства и методы программирования. Более надежныйпуть — исследовать функциональное программирование какнезнакомый мир.
Идеи функционального программирования легчевоспринять как самостоятельную теорию или интеллектуальную игру,которая новыми путями непременно приведет к знакомым иинтересным задачам, но обеспечит преимущество — изящные решенияи глубину понимания.Джон Маккарти предложил проект языка Лисп (LISP - LISt Processing) вкачестве средства исследования границ применимости компьютеров, вчастности, методом решения задач искусственного интеллекта. Идеиэтого языка вызвали не утихающие по сей день дискуссии оприоритетах в программировании и сущности программирования.Лисп послужил эффективным инструментом экспериментальнойподдержки теории программирования и развития сферы егоприменения.
Рост интереса к Лиспу коррелирует с улучшениемэлементной базы, повышением эксплуатационных характеристикоборудования и появлением новых сфер применения ИТ.Существует и активно применяется более трехсот диалектов Лиспа иродственных ему языков: Interlisp, muLisp, Clisp, Scheme, ML, Cmucl, Logo,Hope, Sisal, Haskell, Miranda и др.МатематическиепрограммированияосновыфункциональногоСформулированная Джоном Маккаpти (1958) концепция символьнойобработки информации компьютером восходит к идеям Черча и другихматематиков, известным как лямбда-исчисление с конца 20-х годовпрошлого века. Выбирая лямбда-исчисление как теоретическую модель,Маккарти предложил рассматривать функции как общее базовое6Л.В. ГородняяОсновы функционального программированияпонятие, к которому достаточно естественно могут быть сведены вседругие понятия, возникающие при программировании [1].Такое сведение вовсе не означает, что все понятия сваливаются в однукучу, что исчезают границы между понятиями. Сведение выполненотак, что при сохранении всех понятийных границ выстроено болееобщее пространство, в рамках которого эти понятия упорядочены имогут взаимодействовать согласно формальным определениям.Управлениеобработкойинформациивлямбда-исчисленииосуществляется в рамках иерархии свободных и связанных переменных,реализуемых с помощью таблицы соответствия символов и ихтолкования.
Обработка представляется посредством интерпретациивыражений, построенных из всюду определенных функций, аргументыкоторых упорядочены. Общностью такое построение сравнимо саксиоматической теорией множеств.Понятие "функция" связано с понятиями аргумента функции, области еесуществования и значения, соответствия между ее аргументами ирезультатами, а также применения функции к ее аргументам.Существуют различные точки зрения на природу всех этих терминов, награницы определяющих их множеств, на возможность ихвзаимодействия в более общих построениях. Наиболее явныеразночтения, связанные с трактовкой однозначности результатафункции, могут быть устранены при рассмотрении структурныхзначений.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.














