Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП / ЯП / Yap_Lab_7

.odt
Скачиваний:
40
Добавлен:
11.05.2015
Размер:
16.12 Кб
Скачать

Министерство образования и науки РФ

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

Язык функционального программирования Haskell

ОТЧЁТ

по дисциплине «Языки программирования»

Выполнил: студент гр. 521

Ингинен А. И.

_________________ 26.12.2012

Проверил: доцент каф. КИБЭВС

Романов А.С.

_________________ 26.12.2012

Томск 2012г

Цель работы: Знакомство с основами функционального программирования на примере языка Haskell.

Задание:

      1. Изучить теоретические сведения.

      2. Реализовать программу, высчитывающую решение кубического уравнения, на языке функционального программирования Haskell.

      3. Написать отчет и защитить у преподавателя.

Теоретический материал:

Программа на функциональном языке программирования состоит из множества определений функций и выражения, чья величина рассматривается как результат программы. Математической моделью функционального программирования является λ-исчисление. Основными языками функционирования в настоящее время являются Lisp и Haskell. В данной лабораторной работе рассматривается интерпретатор Hugs языка Haskell.

Язык Haskell является строго типизированным языком, т.е., как правило, программисту не надо в явном виде определять тип.

Основными типами языка Haskell являются:

1.Integer и Int для представления целых чисел. Значения типа Integer не ограничены по длине; тип Int представляет целые числа фиксированной длины.

2.Float и Double для представления вещественных чисел.

3.Bool - для представления результата логических выражений. Может принимать значения True или False.

4.Char - для представления символов. Определить тип можно и вручную, используя оператор

5:: Integer

Интерпретатор Hugs можно использовать для вычисления арифметических выражений. При этом можно использовать операторы +, — , % / с обычными правилами приоритета. Кроме того, можно использовать оператор ^ (возведение в степень). Также можно использовать стандартные математические функции sqrt, sin, cos, tg, exp, log и т.д. Вызов функции выглядит следующим образом (извлечь квадратный корень из 16):

sqrt 16

Кортеж - структура для хранения фиксированного количества разнородных данных. Например, пара ((V, 54), 3.14) принадлежит типу ((Char, Integer), Double). Аналогично можно задавать тройки и т.д., записывая их аналогичным образом.

Для работы с парами используются стандартные функции fst и snd, возвращающие, соответственно, первый и второй элементы пары.

Список - вычислительная структура последовательностей, состоящих из элементов одного типа.

Список можно задать с помощью [ ] или оператора:

[1,2,3] = 1:[2,3]=1:(2:[3])=1:2:[3]=1:(2:(3:[]))=1:2:3:[] Списки могут содержать элементы любого типа: 1:2:3:: [Int] [True,False]:: Bool

С помощью списка можно определить тип String ['а','b','с']:: [Char] = "abc" :: String

Список можно определить с помощью другого списка (с помощью так называемого генератора):

[х*2|х<-[1,2,3,4]]=>[2,4,6,8] ,

Основные функции для работы со списками.

-head возвращает первый элемент списка;

-last возвращает последний элемент списка;

-tail возвращает список без первого элемента;

-ink возвращает список без последнего элемента;

-null проверяет список на пустоту;

-length возвращает длину списка;

-elem проверяет наличие элемента в списке;

-take возвращает список, состоящий из n первых элементов исходного списка;

-zip возвращает список, состоящий из пар объединенных исходных списков;

-!! возвращает элемент, номер которого задан (начиная с 0).

zip [«20», «30»] [1,2,3] Результат выполнения:

[(«20»J),(«30»,2)]:: [([Char,Integer)]

Функция в языке Haskell определяется следующим образом:

square:: Integer — > Integer

square x = x * x

Первая строка объявляет, что мы определяем функцию с именем square, принимающую на вход параметр типа Integer и возвращающую результат типа Integer. Вторая строка является непосредственно определением функции.

Имена пользовательских функций и переменных должны начинаться с латинской буквы в нижнем регистре. Остальные символы в имени могут быть прописными или строчными латинскими буквами, цифрами или символами подчеркивания и апострофом.

Задание:

Решение квадратного уравнения.

solve :: (Floating a) => (a, a, a) -> (a, a)

solve (a, b, c) = (x1, x2)

where

d = b * b - 4 * a * c

sqD = sqrt d

a2 = 2 * a

x1 = (-b + sqD) / a2

x2 = (-b - sqD) / a2

s e = solve (e :: (Float, Float, Float))

Заключение:

В ходе выполнения данной лабораторной работы была реализована программа на языке функционального программирования Haskell.

Соседние файлы в папке ЯП