Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Язык программирования FPTL и средства работы с ним

Язык программирования FPTL и средства работы с ним

PDF-файл Язык программирования FPTL и средства работы с ним Параллельные системы и параллельные вычисления (5751): Другое - 9 семестр (1 семестр магистратуры)Язык программирования FPTL и средства работы с ним: Параллельные системы и параллельные вычисления - PDF (5751) - СтудИзба2015-08-23СтудИзба

Описание файла

PDF-файл из архива "Язык программирования FPTL и средства работы с ним", который расположен в категории "". Всё это находится в предмете "параллельные системы и параллельные вычисления" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "параллельные системы и параллельные вычисления" в общих файлах.

Просмотр PDF-файла онлайн

Текст из PDF

ОбщееО языкеВстроенные функцииОперации композицииТипы данныхОписание программыПроцесс выполнения функциональной программыВызов программыПолный пример программыИнтерпретатор и компилятор языка FPTLКластерный интерпретаторКак достигается автоматический поиск переносимых ФП?Как мы находим мемоизуемые ФП?Как мы поддерживаем любое кол-во машин в кластере и процессоров на машине?Массивы в языке FPTLКомпилятор программ языка FPTLХарактеристики компилятораТесты компилятораПриложение – тексты тестовых программВычиcление интеграла с заданной точностью – JavaВычиcление интеграла с заданной точностью – FPTLТест рекурсии - JavaТест рекурсии – FPTLВычисление значения N-ого числа Фибоначчи на типе данных Nat – JavaВычисление значения N-ого числа Фибоначчи на типе данных Nat – FPTLРазделение строки на лексемы – JavaРазделение строки на лексемы – FPTLОбщееФункциональный язык программирования FPTL (Functional Programming Typified Language)был разработан профессорами МЭИ Кутеповым В.П.

и Фальком В.Н. В данный моментведется разработка нескольких проектов по данному языку: транслятора с FPTL на Java,среды выполнения для кластеров и многоядерных систем, среды разработки программ.Основное назначение данного языка (по мнению его авторов) – это выполнениевысокопроизводительных вычислений. В данный момент язык не представляет каких-либосредств работы с пользовательским интерфейсом (создание оконнных приложений на немневозможно), однако возможно подключение GUI через механизм подключаемых библиотек.О языкеСейчас будет приведено неполное описание языка.

Но, тем не менее, этого подможестваязыка будет достаточно для ознакомления с ним и написания достаточно сложных программ.В языке FPTL программа – это функция, определенная над некоторыми типами данных. Типфункции записывается как Tвх => Tвых, Tвх – тип входных данных, Tвых – тип выходныхданных. В языке есть набор базисных функций (приведен в главе «Встроенные функции»).Базисом для данных являются встроенные типы данных и конструкторы (описываются вглаве «Типы данных»).Встроенные функцииДалее приводится список встроенных функций языка FPTL.

Отмечу, что для строковыхфункций первый символ в строке имеет индекс, равный нулю.ФункцияДопустимые типыданныхОписаниеСм. след. таблицуplusx+yminusx–ymultx*ydivx/yremостаток от целочисленного деленияint*int => introundцелая часть xreal => intabsмодуль xInt=>int; real=>real;eqx=yСм. след. таблицуnex != yltx<ygtx>ylex <= ygex >= ycatконкатенация строкstring*string => stringlenдлина строкиstring => intinsвставка подстроки после указанного символа висходную строкуstring*int*string => stringextrизвлечение подстроки указанной длины,начинающейся с указанной позицииint*int*string => stringfindпоиск подстрокиstring*string => intandx&yСм.

след. таблицуorx|ynot!xbool => boolI(m,n)выбор m-го элемента из кортежа длиной n‘t1*’t2*…*’tm*…*’tn =>‘tm<C>функция-константа: для любого x <C>(x) = C, где C– некоторая константа любого типа‘t => ‘tC, где ‘tC – типконстанты Cidтождественная функция: для любого x id(x) = x‘t => ‘tФункцииДопустимые типы данныхPlus, minus, mult,int*int => int; real*real => real; real*int => real; int*real => realdivEq, ne, lt, gt, le,geint*int => bool; int*real => bool; real*int => bool; real*real =>bool; string*string => bool; bool*bool => boolAnd, orbool*bool => boolНа данный момент в язык введены функции для обработки массивов, но пока их поддержкавведена не всюду, они будут носить только экспериментальный характер.Операции композицииЯзык построен на основе всего трех операций композиции функций:Операции «точка»: F1.F2, означающей последовательное применение сначалафункции F1 к исходным данным, а потом функции F2 к результату функции F1.

Вобычных языках программирования аналогичная конструкция выглядит так: F2(F1(d))Операции «звездочка»: F1*F2, означающей независимое друг от друга вычислениезначений функций F1 и F2 к аргументу данной операции. Эта операция являетсяявным источником параллелизма в программах – каждую функцию Fi можновычислять параллельно. Заметим, что в качестве функций Fi могут быть любыедругие функции. Например, этими функциями снова могут быть операторы звездочка,что дает нам возможность использования N-арного вида оператора звездочка:F1*…*Fn.Условного оператора: P -> F1, F2 . В случае, если P=false или омеге (специальномунекорректному значению – будет описано далее), то результатом данной операцииявляется F2(d), иначе F1(d).

Данная операция является неявным источникомпараллелизма – мы можем спекулятивно выполнять вычисление значений функций F1и F2 вместе с вычислением условия P. После вычисления значения условия, один изпотоков F1, F2 становится ненужным и его необходимо прекратить.Еще одним средством построения программ на языке FPTL является представлениепрограммы как системы функциональных уравнений (или, говоря простым языком,программы, как набора функций).Типы данныхВ языке объявлены 4 встроенных типа данных: bool, int, real, string.В языке можно объявлять свои типы данных.Пример создания синонима к существующему типу данных:Data d{d = int;}Пример создания типа данных-кортежа (или структуры – как кому привычнее):Data d{d = string * int * int;}В типе данных могут быть кортежи только одной длины.Все типы данных в программе описываются в виде системы типовых уравнений.

Каждоеуравнение имеет вид:Имя типовой переменной = описание типовой переменной;В приведенных примерах типы состояли только из одного уравнения. Пример типа,определенного с помощью нескольких уравнений:Data Person{Person = name*age;name = string;age = int;}Для создания данных, отличных от встроенных типов (int, string и т.д.) в языке применяютсяконструкторы. Конструктор – это функция, создающее данное нового типа. Описание всехконструкторов имеет вид:Данные, из которых строим наше данное => тип нашего данного : имяконструктора;По соглашению, имена всех конструкторов начинаются с “c_”.Длина данного, построенного на основе конструктора, равна одному.Пример создания типа с конструкторами:Data Nat{Constructors{=>Nat : c_null;Nat=>Nat : c_succ;}Nat = c_null ++ (Nat).c_succ;}Тип Nat имеет два конструктора: c_null и c_succ.

Любое значение типа Nat может выглядетькак либо одиночный конструктор c_null, либо конструктор c_succ, примененный к данномутипа Nat (последняя строка описания типа данных Nat). Примеры: c_null,((c_null).c_succ).c_succ.Создаваемые типы данных могут быть параметризованы типовыми переменными.Фактически, это аналог шаблонов из Си или generics из Java 5. Имена типовых параметровдолжны начинаться с апострофа. Их нужно указать в квадратных скобках после имени типаданных в его заголовке.Пример создания параметризованного типа данных (аналог шаблонов):Data List['x]{Constructors{=>List : c_nil;'x*List['x] => List['x] : c_cons;}List = c_nil ++ ('x * List).c_cons;}В данном примере создается абстрактный тип данных «список».

Тип элементов, которые онбудет содержать, определяется дальше в программе (явно или неявно). Возможноиспользование в качестве типовых параметров и типов данных, которые сами имеюттиповые параметры (например, создание списка списоков строк).Описание программыСама программа находится в блоке Scheme. Сразу приведу пример программы вычисленияфакториала, от которого можно отталкиваться в дальнейшем описании структурыпрограммы:Scheme factorial{factorial = P -> F1, F2;P = (id*<0>).eq;F1 = <1>;F2 = (id * DEC.@).mult;DEC = (id*<1>).minus;}Схема состоит из нескольких функциональных уравнений. Все функциональные уравненияописываются с новой строки. Точкой входа в программу является функциональнаяпеременная, с именем, совпадающим с именем схемы.

Все остальные функциональныепеременные должны иметь имя, состоящее только из заглавных букв и цифр. Каждоефункциональное уравнение имеет вид:Имя функциональной переменной = описание функциональной переменной;В описании функциональной переменной мы можем использовать три введенные ранееоперации композиции, функциональные переменные, определенные в нашей схеме, а такжевсе встроенные функции языка. В программе явно не указываются аргументыфункциональных переменных. По сути, они передаются неявно.

Например, аргументыфункциональной переменной factorial будут переданы в функциональные переменные P, F1,F2 при их вызовах из factorial. Получить значение аргументов можно либо при помощифункции id, результатом которой являются все ее входные аргументы ( id(a)=a), либо припомощи функции I(m, n) – выбор m-ного аргумента из n входных аргументов. В программеможет быть использован символ “@” – он является синонимом функциональной переменнойс именем, совпадающим с именем схемы.Процесс выполнения функциональной программыОпишем то, как меняется аргумент функциональных переменных в процессе выполненияфункциональной программы.В factorial мы передаем одно целое число типа int.

Оно же передается в P, F1, F2.В P мы берем аргумент функциональной переменной (id возвращает целое число) иприписываем к нему справа еще одно целое число – константу ноль. Этот кортеж из двухчисел становится аргументом функции eq (проверка на равенство). Результат функции eq(булевское значение) становится результатом функциональной переменной P.В F1 мы не используем входной параметр, а просто возвращаем целочисленную константукак результат функции.

Целое число будет и типом результата функциональной переменнойfactorial, т.к. тип условного оператора определяется типом любой из ветвей (эти типыдолжны совпадать), а результатом одной из ветвей является результат функции F1.В F2 мы берем входной параметр (целое число) и к нему справа приписываем результатвызова функций DEC.@ (эквивалентно DEC.factorial). Результатом фукциональнойпеременой DEC будет целое число (см. ниже). Оно передается на вход функциональнойпеременной factorial.

На выходе из нее мы получим также целое число (см. выше).Соответственно, результатом вызова пары DEC.@ будет одно целое число. Мы приписываемего справа к арументу функции F2 (id) и передаем полученную пару целых чисел на входфункции mult (умножение). Ее результат (целое число) будет являться результатомфункциональной переменной F2.В DEC мы берем аргумент функциональной переменной (целое число), приписываем к немусправа целочисленную константу (1) и передаем полученную пару чисел на вход функцииminus (вычитание). Полученное целое число будет результатом функциональнойпеременной.Вызов программыВызов программы, описанной в схеме, производится из секции Application программы:Application%factorial(6)илиApplicationArray[int] : a =(15 * (910 * (200 * (0 * (8 * (75 * (3 * (12 * (7 * (6 * (1 * (4 * (15 *(40 * c_empty).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add).c_add;%BubbleSort(a)Во втором примере показан пример объявления переменных в секции Application.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5168
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее