1 Символьные вычисления и функциональное программирование Вывод знаний 3.

Slides:



Advertisements
Similar presentations
Предметно-ориентированные языки и Lisp как средство их построения Дмитрий Бушенко 30.
Advertisements

What does it mean? Year 7, unit 1, lesson Ex. 1, p.17. Listen to the children and answer the questions of the exercise. 2. Ex 2, p.17. Do the exercise,
Английский язык. Настоящее совершенное длительное время.
ЗАРЯДКА НА АНГЛИЙСКОМ ЯЗЫКЕ.  Зарядка на уроке английского языка может стать самым любимым и веселым занятием для детей, при том, что она проходит исключительно.
ООП Классы. Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Астрометрические каталоги К.В.Куимов, ГАИШ МГУ. Определение астрометрического каталога Астрометрический каталог – понятие неопределённое. Например, это.
Системы с наследованием. Если систему можно представить в виде : Где - непрерывные функции, то такая система называется системой с наследованием. Математическое.
Системы отбора. Условные обозначения (1) (2) (3) (4) (5) (6) (7) Математическое моделирование процессов отбора2.
Половинкин А.Н..  Вычисления общего назначения на GPU  Архитектура GPU  Программная модель выполнения на CUDA  Программирование с использованием CUDA.
R1R2R3R4R5R6R7R1R2R3R4R5R6R7. Аксиома R 1. В пространстве существуют плоскости. В каждой плоскости пространства выполняются все аксиомы планиметрии.
Некомпенсаторное агрегирование и рейтингование студентов Авторы: Гончаров Алексей Александрович, Чистяков Вячеслав Васильевич. НФ ГУ ВШЭ 2010 год.
ПРИНЦИПЫ РАЗРАБОТКИ СИСТЕМЫ КЛАССА LEARNING MANAGEMENT SYSTEM И ОПЫТ ЕЕ ИСПОЛЬЗОВАНИЯ НА ФАКУЛЬТЕТЕ МЕНЕДЖМЕНТА Афанасьева С.В. Кафедра бизнес-информатики.
Неотрицательное решение задачи Коши. Нередко постановка задачи требует чтобы фазовые переменные принимали лишь неотрицательные значения. Так, в физических.
Всевоволод Головизнин, MVC – паттерн проектирование, в котором бизнес - логика, управляющая логика и интерфейс разделены на три отдельных компонента.
Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования Научный руководитель: Я.А. Кириленко.
Учитель математики Кулакова Т.М. МОУ ООШ №15 г.о Новокуйбышевск Самарской области Сентябрь 2011г.
Тема урока: Взаимно обратные числа 6 класс. Цели урока: вввести понятие взаимно обратных чисел; ссформировать умение находить взаимно обратные числа.
Российский государственный педагогический университет им. А.И. Герцена ИНСТИТУТ ДОВУЗОВСКОЙ ПОДГОТОВКИ Дистанционное обучение «Русский язык. Подготовка.
Скриптовые языки на примере Perl. Языки программирования Скриптовые Программа (или ее бай-код) интерпретируется Зачастую более высокий уровень абстрагирования.
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Блок 3. Семейства белков I. Множественное выравнивание Первый курс, весна 2008, А.Б.Рахманинова.
Язык JavaScript Скриптовый язык для выполнения на html-страницах.
Ответы на вопросы 7 июля « Подготовка паспортов безопасности» тел: (495) Экологический Синтезирующий.
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Алгоритмические средства Java.
Анатомия класса. Схожесть с др. языками   С# похож на язык Java в том, что он требует, чтобы вся программная логика была заключена в определения типов.
Основы цифровой обработки речевых сигналов. Общая схема процесса речеобразования x[n] – дискретные отсчеты сигнала возбуждения y[n] – дискретные отсчеты.
Microsoft Solutions Framework Технологии программирования. Курс на базе Microsoft Solutions Framework Семинар 2. Знакомство с построением диаграмм вариантов.
Алгоритмы сортировки и поиска
Сравнение различных методов хранения XML в реляционных базах данных и в разных системах. Нгуен Тхань Хуен- 545 группа Руководитель : Б.А. Новиков Рецензент:
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
Деревья курс «Алгоритмы и структуры данных» Отделение Программной инженерии.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
"The European Molecular Biology Open Software Suite"
Формантный синтезатор речи. Часть 1. Полюсы и нули – иное понимание Полюс – это пара чисел (B, F), B – ширина форманты, F – частота форманты Нуль – это.
EDCWiki Electronic Document Circulation using wiki Система электронного документооборота на основе wiki Участники: Кузьмин К.А., Цыцулин В. И. Руководитель:
1 Влияние машинной архитектуры Структура и принципы работы компьютера На разрабатываемый язык программирования машинная архитектура влияет двояко: –непосредственно.
Симулятор квантовых вычислений Выполнил: Гедерцев А.С. Руководитель, д.ф.-м.н., профессор: Граничин О.Н.
ВЫЧИСЛЕНИЕ В ЛИСПЕ Функциональное программирование Григорьева И.В.
Деревья и их представление в STL Презентацию подготовила Чиркова Ольга, 2 подгруппа, группа 271ПИ.
Пользовательские действия (custom actions) в JSP. JSTL.
Реализация XPath над S-выражениями 2007 Миленин Евгений, гр. 544 Кафедра Системного Программирования Математико-Механический ф-т, СПбГУ Научный руководитель:
Работа с массивами в C#.
Демидов А.В г. Операционные системы Лекция 4 Работа с файлами.
Геоинформационные системы Чернышов Алексей Акимович.
Обработка исключений Гудов А.М., Завозкин С.Ю
ВВЕДЕНИЕ В ВЫЧИСЛИТЕЛЬНУЮ МАТЕМАТИКУ Лекция 5 6 октября 2009 ВЫЧИСЛИТЕЛЬНАЯ ЛИНЕЙНАЯ АЛГЕБРА.
0 + 0= = = = 10 Арифметические операции во всех позиционных системах счисления выполняются по одним и тем же хорошо известным вам правилам.
XML Схемы XML документов. XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
INFSO-RI Enabling Grids for E-sciencE Управление заданиями в GRID. Н. Клопов ПИЯФ, Гатчина.
«Отгадай символы Рождества»
Нескучное тестирование с pytest
Zend Engine изнутри Дмитрий Стогов. Немного истории Zend Engine была разработана в качестве ядра для PHP 4 Andi Gutmans и Zeev Suraski в 1999 PHP 5.0.
Язык программирования C#
Алгебра логики это раздел математики, изучающий высказывания, рассматриваемые со стороны их логических значений (истинности или ложности) и логических.
Рассмотрим более подробно работу управляющей компоненты. В ЭС используются нетрадиционные методы управления. Это вызвано неформализованностью решаемых.
Микропроцессорные системы Программирование INTEL 8086 Системная программа Debug.
Anekdot ANDROID CLUB Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech.
«Центр Разработки и Внедрения Террасофт Поволжье»
‘For and Against’ Essays Useful tips. Plan Introduction - Paragraph 1 (state topic – summary of the topic without giving your opinion) Main Body – Paragraph.
Jokes Jokes Jokes Teacher: Where's your text book? Student: At home. Teacher: What's it doing there? Student: Having a.
JavaScript
Общая характеристика семейства Семейство Крестоцветные включает около 4 тысяч видов. По-другому семейство Крестоцветные называют семейством Капустные.
SonarQube Система непрерывного анализа и измерения качества кода.
Управление виртуальной инфраструктурой Hyper-V и Virtual Server
November CTP Андрей Коршиков MCP-клуб, Краснодар Декабрь 2009.
Решение типовых расчетных задач по формулам. Определение массовой доли элементов Массовая доля элемента ω(Э) % - это отношение массы данного элемента.
Presentation transcript:

1 Символьные вычисления и функциональное программирование Вывод знаний 3

© Муромцев Д.И. Лекция 9 2 Язык LISP (List Processing)  Создан в конце 1950-х. Основные уникальные особенности LISP:  Основной структурой данных является список символов,  Программы на этом языке также имеют списочную структуру,  Базовыми операциями являются операции над списками.  Вычисление, управляемое данными.

© Муромцев Д.И. Лекция 9 3 Физическая символическая система (1) В основе символьных вычислений лежит понятие символа. Можно определить символ как «нечто, заменяющее другое нечто», «Другое нечто» в данном случае является значением (designation) символа – то на что ссылается и что представляет символ. Мы можем понимать под символами, с которыми выполняются какие-либо действия, все, что угодно. Программа, обрабатывающая эти символы, создает структуры символов. Операции изменяют семантику символов, имитируя тем самым деятельность человека. Символьные вычисления подразумевают единообразное представление как данных, так и правил манипуляции с символами в виде некого физического устройства. Впервые эта идея была сформулирована Ньюэллом и Саймоном в гипотезе о физической символической системе (The Physical Symbol System Hypothesis)

© Муромцев Д.И. Лекция 9 4 Физическая символическая система (2) Физическая символическая система «состоит из множества сущностей (entities), называемых символами (symbols), являющихся физическими шаблонами (physical patterns), которые могут быть компонентами сущностей другого типа, называемых выражениями (expression) или символическими структурами (symbol structure)». Важнейшими понятиями, связанными с символическими структурами являются обозначение (designation) и интерпретация (interpretation). Выражение может ссылаться (refer) на какой-либо другой объект, в том числи и на другую символическую структуру

© Муромцев Д.И. Лекция 9 5 Структура символической системы  Память, содержащая символические структуры, число и содержание которых может меняться во времени;  Набор операторов для манипулирования символическими структурами, например, чтение, запись, копирование;  Средства управления, предназначенного для непрерывной интерпретации текущей активной символической структуры, к которой выполняется обращение;  Средства ввода/вывода для взаимодействия с окружающей средой, посредством рецепторов и эффекторов.

© Муромцев Д.И. Лекция 9 6 Символические вычисления в LISP Синтаксическими элементами языка LISP являются символьные выражения (symbolic expression), которые называются s-выражениями. В виде s-выражений представляются и данные, и программы. S-выражение может быть либо атомом (atom), либо списком (list). Ниже приведены несколько примеров атомов: 3,1415 x 100 good *слово_на_русском_языке* nil

© Муромцев Д.И. Лекция 9 7 Списки в LISP Списки в LISP формируются из атомов или других (вложенных) списков, разделенных пробелами и ограниченных круглыми скобками. Пустой – nil – список можно обозначить (). Благодаря этим скобкам LISP получил неформальное название «язык скобок». Ниже следуют несколько примеров списков: ( ) (tom mary john joyce) (a (b c) (d (e f))) (on block-1 table) (likes bill X) (and (likes george kate) (likes bill merry))

© Муромцев Д.И. Лекция 9 8 Вычисления в LISP Запись выражений:  (* 7 9)  (- (+ 3 4) 7) Оценивание выражений:  (eval (+ 2 3))  (quote (+ 2 3)) Определение функций:  (defun sqr (x) (* x x))  (funcall #’(lambda (x) (* x x)) 4)  (defun sqr (x) (lambda (x) (* x x)))

© Муромцев Д.И. Лекция 9 9 Условные операторы (cond ( ) ( ) … ( ) )

© Муромцев Д.И. Лекция 9 10 Обработка s-выражений Основными способами доступа к элементам списка являются функции car – возвращающая голову или первый элемент списка и cdr – возвращающая хвост или тот же список после удаления из него первого элемента. Обе функции принимают в качестве аргумента список. Используя функций car и cdr можно реализовать так называемую рекурсию по дереву или car-cdr рекурсию. Отличие этой рекурсии от обычного рекурсивного вызова заключается в том, что при сканировании списка, если текущий элемент является не атомарным (вложенный список), то выполняется также перебор элементов вложенного списка.

© Муромцев Д.И. Лекция 9 11 Функциональное программирование в Python  Базовыми функциональными элементами являются map(), reduce(), filter() и оператор lambda.  Этих функций и нескольких базовых операторов достаточно для написания любой программы на Python; в частности, все управляющие утверждения ('if', 'elif', 'else', 'assert', 'try', 'except', 'finally', 'for', 'break', 'continue', 'while', 'def') можно представить в функциональном стиле, используя исключительно функции и операторы.

© Муромцев Д.И. Лекция 9 12 Пример if/elif/else Ообычные условные операторы if/elif/else могут быть представлены в виде «замкнутых накоротко» ("short circuits") логических выражений, вычисление которых заканчивается сразу, как только становится известен их логический результат: # Традиционное выражение для условного оператора if : func1() elif : func2() else: func3() # Эквивалентное "накоротко замкнутое" выражение ( and func1()) or ( and func2()) or (func3()) # Пример "накоротко замкнутого" выражения >>> x = 3 >>> def pr(s): return s >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other')) 'other‘ >>> x = 2 >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other')) 'two'

© Муромцев Д.И. Лекция 9 13 Пример lambda Условных вызовы с помощью выражений дают максимальную выгоду при совместно использовании с другими функциональным конструкциями, например оператором lambda, который может содержать только выражения. Выражение lambda позволяет в общей форме представить условные возвращаемые значения. Изменим определение функции pr(s) из предыдущего примера и добавим namenum() используя выражение lambda: >>> pr = lambda s:s >>> namenum = lambda x: (x==1 and pr("one")) \... or (x==2 and pr("two")) \... or (pr("other")) >>> namenum(1) 'one' >>> namenum(2) 'two' >>> namenum(3) 'other'

© Муромцев Д.И. Лекция 9 14 Пример reduce Функция reduce() применяет переданную функцию к каждому значению в списке и к внутреннему накопителю результата. Например, вычисление факториала числа 10 с помощью утверждения for выглядит так: def factorial10(): factor = 1 for i in range(2, 10): factor = factor * i return factor на основании функции reduce значительно короче: reduce(lambda n,m:n*m, range(1,10))

© Муромцев Д.И. Лекция 9 15 Пример map Функция map() применяет переданную функцию к каждому элементу в переданном списке (списках) и возвращает список результатов. for e in lst: func(e) # цикл, основанный на утверждении 'for' map(func, lst) # тот же цикл, основанный на вызове функции map() Этот же подход можно применить для введения в функциона- льные вызовы элементов императивного программирования, то есть состоящего из последовательности утверждений, требу- ющих «сделать это, затем сделать то, затем - что-то еще»: # создаем вспомогательную функцию для выполнения действий do_it = lambda f: f() # пусть f1, f2, f3 (etc) — выполняют требуемые действия # тогда последовательное выполнение будет таким map(do_it, [f1,f2,f3])

© Муромцев Д.И. Лекция 9 16 Сравнение характеристик языков LISP и Python Ключевые возможностиLISPPython Все является объектамиДа Переменные не типизированыДа Поддержка гетерогенных списков Да (linked list и array)Да (array) Мультипарадигмное программирование Да: функциональное, императивное, ООП, обощенное Да: функциональное, императивное, ООП Управление памятьюАвтоматическая сборка мусора МодулиСложны в использованииПросты в использовании Интроспекция объектов и классов Строгая Макросы метапрограммированияРазвитые макросыНет Интерактивный ввод и вычисления Да: > (string-append "hello" " " "world") "hello world" Да: >>> ' '.join(['hello', 'world']) 'hello world' Кросс-платформеная реализацияДа: Windows, Mac, Unix, Linux Да: Windows, Mac, Unix, Linux Количество реализацийМногоОдна ЛицензированиеЛицензированный и open source Open source GUI, Web и др. библиотекиНет в стандартеЕсть стандартные GUI, Web и др. библиотеки