Домашнее задание. Findmajor, alldifflists, findinlists. Continuations (продолжения). Continuation-passing style (cps)
Содержание
- 2. findMajor Найти число больше суммы всех остальных Идея: можно сначала сосчитать сумму s всех чисел Тогда
- 3. findMajor - продожение Написать специальный find find cond [] = Nothing find cond (x:xs) = if
- 4. allDiffLists allDiffLists n k = allDiffLists' n k [] allDiffLists' n k s (s – те
- 5. findInLists Без failure continuation как-то так: искать в первом подсписке if нашли then вернуть то, что
- 6. Continuations (продолжения). Continuation-passing style (CPS)
- 7. Continuation-passing style Continuation: параметр–функция. Задает, что делать после окончания работы функции failure continuation – вызываем, если
- 8. Continuation-passing style – простой пример Обычная функция: sqr x = x*x CPS sqr_cps x f =
- 9. CPS и рекурсия. Пример: факториал Обычная программа fact 0 = 1 fact n = fact (n-1)
- 10. Как это работает? Обычный fact fact 4 ? fact 3 ? fact 2 ? fact 1
- 11. Чего так можно добиться? Оказывается, к такому виду можно привести любую программу fact_cps n f =
- 12. Некоторые применения Можно реализовывать сложную передачу управления Peter Landin: как программу с goto перевести в функциональную
- 13. Еще про >>=. >>= для других типов
- 14. Три поиска Найти в списке: первое число, меньшее 5 первое число, большее 10 первое число, не
- 15. «Выполнять до первой неудачи» f xs = do x y 10) xs z return (x+y+z) Если
- 16. do для Maybe >> и return (и, следовательно, do) определены и для Maybe Смысл такой же
- 17. Что такое монады, формально Монада – это тип, для которого определены операции >>= return Строго говоря
- 18. В каких случаях используют монады? f xs = do x y 10) xs z return (x+y+z)
- 19. Функция print print выражение print 56 56 Ничего не возвращает, только печатает Смысл очень понятен Но
- 20. Пример: вывод + рекурсия pr 0 = print 0 pr n = do print n pr
- 21. Задача про >>> и ее продолжение
- 22. >>> Что-то вроде композиции, но специально для функций вида список -> (значение, список) Пример вызова: f
- 23. Недостатки >>> Нужно ли еще что-то, чтобы гибко комбинировать функции такого вида? Пример 1: Найти число
- 24. Символьные вычисления
- 25. eval data Expr = Num Integer | X | Add Expr Expr | Mult Expr Expr
- 26. diff data Expr = Num Integer | X | Add Expr Expr | Mult Expr Expr
- 27. Если хотим использовать несколько переменных? X ? Var "a", Var "sum" и т.д. Add (Mult (Num
- 28. Про некоторые доп.задачи
- 30. Скачать презентацию