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

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


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

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

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

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

Презентация на тему Системы исполнения функциональных программ

Кубенский А.А. Функциональное программирование.Глава 5. Системы исполнения функциональных программ.Рассмотрим программу вычисления факториала.Пример программы.begin f := 1; while n > 1 do begin f := f * n;
Кубенский А.А. Функциональное программирование.Глава 5. Системы исполнения функциональных программ.Глава 5. Системы исполнения Кубенский А.А. Функциональное программирование.Глава 5. Системы исполнения функциональных программ.Рассмотрим программу вычисления факториала.Пример Кубенский А.А. Функциональное программирование.Глава 5. Системы исполнения функциональных программ.Представление выражений и программ.data Кубенский А.А. Функциональное программирование.Глава 5. Системы исполнения функциональных программ.Исполнение операторов.replace :: String Кубенский А.А. Функциональное программирование.Глава 5. Системы исполнения функциональных программ.Пример компиляции и исполнения
Слайды презентации

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

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

программ.
Рассмотрим программу вычисления факториала.
Пример программы.
begin f := 1;

while n > 1 do begin f := f * n; n := n – 1 end end

В начальном состоянии существенно только значение переменной n; в конце работы результат определяется значением переменной f.

Прежде всего, переведем программу в вид, удобный для обработки.

data Expression = { представление выражений } data Operator = { представление операторов } data Context = { представление контекста переменных }

Два способа обработки и исполнения программы:

Интерпретация:

interpret :: Operator -> Context -> Context

Компиляция:

compile :: Operator -> (Context -> Context)

На самом деле оба способа представлены одной и той же карринговой функцией!


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

программ.
Представление выражений и программ.
data Expression = Integral Int |

Logical Bool | Variable String | Unary String Expression | Binary Expression String Expression

data Operator = Skip | Assignment String Expression | Sequence [Operator] | If Expression Operator Operator | While Expression Operator

type Context = [(String, Expression)]

interpret :: Operator -> Context -> Context

eval :: Expression -> Context -> Expression

eval v@(Integral n) _ = v eval v@(Logical b) _ = v eval (Variable x) ctx = assoc x ctx eval (Unary op ex) ctx = intrinsic op [eval ex ctx] eval (Binary e1 op e2) ctx = intrinsic op [eval e1 ctx, eval e2 ctx]

intrinsic "+" [(Integral a), (Integral b)] = Integral (a+b)

intrinsic "-" [(Integral a)] = Integral (-a)

intrinsic "and" [(Logical a), (Logical b)] = Logical (a && b)

intrinsic :: String -> [Expression] -> Expression


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

программ.
Исполнение операторов.
replace :: String -> Expression -> Context ->

Context

replace x val = map (\(y,v) -> (y,if x == y then val else v))

replace "f" (Integral 20) [("n", (Integral 4)), ("f", (Integral 5))]

Например:

даст в результате

[("n", (Integral 4)), ("f", (Integral 20))]

interpret :: Operator -> Context -> Context

interpret Skip ctx = ctx interpret (Assignment x expr) ctx = replace x (eval expr ctx) ctx interpret (Sequence []) ctx = ctx interpret (Sequence (s:seq)) ctx = interpret (Sequence seq) (interpret s ctx) interpret (If expr s1 s2) ctx = case (eval expr ctx) of (Logical True) -> interpret s1 ctx (Logical False) -> interpret s2 ctx interpret oper@(While expr s) ctx = case (eval expr ctx) of (Logical True) -> interpret oper (interpret s ctx) (Logical False) -> ctx


  • Имя файла: sistemy-ispolneniya-funktsionalnyh-programm.pptx
  • Количество просмотров: 134
  • Количество скачиваний: 0