Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Введение в язык Haskell

Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Типы данных и базовые конструкции языка HaskellЭлементарные типы данных Integer, Int – целые значения (25, -17, 111222333444555666777888) Float, Double – вещественные значения (3.14, -2.718281828459045) Char – символьные значения ('A',
Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.1.2. Введение в язык HaskellИстория Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Типы данных и базовые конструкции Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Кортежи и функцииЗначения могут объединяться Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Определение функций с помощью уравненийУравнения Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Подготовка и запуск программmodule Test Prelude> :l factorial 2515511210043330985984000000 :: IntegerTest> Test>Пример запуска программы на исполнениеКубенский"> Исполнение программ с помощью текстовой подстановкиfactorial :: Integer -> Integerfactorial n | Несколько определений простых арифметических функцийКубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.-- Эффективность рекурсивных функций.Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.-- Вычисление числа Эффективность рекурсивных функций. Концевая рекурсия.Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.fib
Слайды презентации

Слайд 2 Кубенский А.А. Функциональное программирование.
Глава 1. Элементы функционального программирования.
Типы

Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Типы данных и базовые

данных и базовые конструкции языка Haskell
Элементарные типы данных
Integer,

Int – целые значения (25, -17, 111222333444555666777888)

Float, Double – вещественные значения (3.14, -2.718281828459045)

Char – символьные значения ('A', '*', '3')

Bool – логические значения (True, False)

Идентификаторы: fact, fAcToRiAl, fact_1, fact''

Знаки операций: +, -, *, <, ==

Идентификаторы применяются для обозначения констант – значений разных типов (простых, составных, функций) и типов. Любому идентификатору можно сопоставить тип и значение:
school :: Integer school = 366
piHalf :: Double piHalf = 3.1415926536 / 2


Слайд 3 Кубенский А.А. Функциональное программирование.
Глава 1. Элементы функционального программирования.
Кортежи

Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Кортежи и функцииЗначения могут

и функции
Значения могут объединяться в более сложные с помощью

кортежирования.

Например:
pair :: (Double, Double) pair = (2.7, 3.14)
attributes :: (Char, (Int, Int, Int), Bool) attributes = ('M', (17, 4, 1955), True)

Тип функции определяется типами аргументов и результата, например:
sin :: Double -> Double -- аргумент и результат типа Double plusInt :: Int -> Int -> Int -- два аргумента типа Int, результат Int divMod :: (Int, Int) -> (Int, Int) -- аргумент и результат - кортежи

Выражения составляются из констант применением операций и функций, например:
result = sin (3.1416 / 4) - 2.5 c10 = 3 + plusInt 3 4 pair = divMod (1458, plusInt 176 192)

Операции и функции отличаются только формой записи. Следующие выражения эквивалентны:
3 + 8 и (+) 3 8 27 `div` 4 и div 27 4 7 `plusInt` 11 и plusInt 7 11


Слайд 4 Кубенский А.А. Функциональное программирование.
Глава 1. Элементы функционального программирования.
Определение

Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Определение функций с помощью

функций с помощью уравнений
Уравнения задают правила, по которым происходит

вычисление функции, то есть каким образом результат получается из аргументов функции, например:
plusInt :: Int -> Int -> Int plusInt a b = a + b
divMod :: (Int, Int) -> (Int, Int) divMod (a, b) = (a `div` b, a `mod` b)

Уравнения могут содержать условные выражения и рекурсивные обращения, например:
factorial :: Integer -> Integer factorial n = if n == 0 then 1 else n * (factorial (n-1))
sum :: Integer -> Integer sum n = n + if n == 0 then 0 else sum (n-1)

factorial1 :: Integer -> Integer factorial1 n | n == 0 = 1 | n > 0 = n * (factorial1 (n-1))

factorial2 :: Integer -> Integer factorial2 0 = 1 factorial2 n = n * (factorial2 (n-1))

Уравнений для одной функции может быть несколько, тогда аргументы последовательно сопоставляются с образцами:


Слайд 5 Кубенский А.А. Функциональное программирование.
Глава 1. Элементы функционального программирования.
Подготовка

Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.Подготовка и запуск программmodule

и запуск программ
module Test where

factorial :: Integer -> Integer
factorial

n | n == 0 = 1
| n > 0 = n * (factorial (n-1))

Слайд 6 Prelude> :l "MyProg.hs"
Test> factorial 25
15511210043330985984000000 :: Integer
Test>
Test>
Пример

запуска программы на исполнение
Кубенский А.А. Функциональное программирование.
Глава 1. Элементы

функционального программирования.

Слайд 7 Исполнение программ с помощью текстовой подстановки
factorial :: Integer

Исполнение программ с помощью текстовой подстановкиfactorial :: Integer -> Integerfactorial n

-> Integer
factorial n | n == 0 = 1

| n > 0 = n * (factorial (n-1))

factorial 3
3 * (factorial (3-1))
3 * (factorial 2)
3 * (2 * (factorial (2-1)))
3 * (2 * (factorial 1))
3 * (2 * (1 * (factorial (1-1))))
3 * (2 * (1 * (factorial 0)))
3 * (2 * (1 * 1))
6

Кубенский А.А. Функциональное программирование.

Глава 1. Элементы функционального программирования.


Слайд 8 Несколько определений простых арифметических функций
Кубенский А.А. Функциональное программирование.
Глава

1. Элементы функционального программирования.
-- Вычисление наибольшего общего делителя двух

натуральных чисел
gcd :: Integer -> Integer -> Integer
gcd m n | m < n = gcd n m
| n < 0 = error "gcd: Wrong argument"
gcd m 0 = m
gcd m n = gcd n (m `mod` n)

-- Проверка заданного натурального числа на простоту
prime :: Integer -> Bool
prime' :: Integer -> Integer -> Bool
prime p | p <= 0 = error "prime: Non-positive argument"
| otherwise = prime' 2 p
prime' d p | d * d > p = True
| p `mod` d == 0 = False
| otherwise = prime' (d+1) p


Слайд 9 Эффективность рекурсивных функций.
Кубенский А.А. Функциональное программирование.
Глава 1. Элементы

Эффективность рекурсивных функций.Кубенский А.А. Функциональное программирование.Глава 1. Элементы функционального программирования.-- Вычисление

функционального программирования.
-- Вычисление числа Фибоначчи, заданного порядковым номером
fib

:: Integer -> Integer
fib 1 = 1
fib 2 = 1
fib n = fib (n-1) + fib (n-2)

fib 6
fib 5 + fib 4
(fib 4 + fib 3) + fib 4
((fib 3 + fib 2) + fib 3) + fib 4
(((fib 2 + fib 1) + fib 2) + fib 3) + fib 4
(((1 + 1) + 1) + (fib 2 + fib 1)) + fib 4
(3 + 2) + (fib 3 + fib 2)
(3 + 2) + ((fib 2 + fib 1) + 1)
(3 + 2) + ((1 + 1) + 1)
8

f1 = f2 = 1
fn = fn-1 + fn-2 при n > 2


  • Имя файла: vvedenie-v-yazyk-haskell.pptx
  • Количество просмотров: 225
  • Количество скачиваний: 0