Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/

Размер: px
Започни от страница:

Download "Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/"

Препис

1 Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 1 / 15

2 Разглеждане на случаи Разглеждане на случаи Можем да дефинниране на функции с разглеждане на случаи по параметрите. Условието на всеки случай се нарича пазач. <име> {<параметър>} { <пазач> = <израз> } + Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 2 / 15

3 Разглеждане на случаи Разглеждане на случаи Можем да дефинниране на функции с разглеждане на случаи по параметрите. Условието на всеки случай се нарича пазач. <име> {<параметър>} { <пазач> = <израз> } + <име> <параметър 1 > <параметър 2 >... <параметър k > <пазач 1 > = <израз 1 >... <пазач n > = <израз n > Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 2 / 15

4 Разглеждане на случаи Разглеждане на случаи Можем да дефинниране на функции с разглеждане на случаи по параметрите. Условието на всеки случай се нарича пазач. <име> {<параметър>} { <пазач> = <израз> } + <име> <параметър 1 > <параметър 2 >... <параметър k > <пазач 1 > = <израз 1 >... <пазач n > = <израз n > ако <пазач 1 > е True връща <израз 1 >, а ако е False:... ако <пазач n > е True връща <израз n >, а ако е False: грешка! Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 2 / 15

5 Разглеждане на случаи Разглеждане на случаи Можем да дефинниране на функции с разглеждане на случаи по параметрите. Условието на всеки случай се нарича пазач. <име> {<параметър>} { <пазач> = <израз> } + <име> <параметър 1 > <параметър 2 >... <параметър k > <пазач 1 > = <израз 1 >... <пазач n > = <израз n > ако <пазач 1 > е True връща <израз 1 >, а ако е False:... ако <пазач n > е True връща <израз n >, а ако е False: грешка! За удобство Prelude дефинира otherwise = True Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 2 / 15

6 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

7 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) fact (-5)? Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

8 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) fact (-5) Грешка! Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

9 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) fact (-5) Грешка! добра практика е да имаме изчерпателни случаи Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

10 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) fact (-5) Грешка! добра практика е да имаме изчерпателни случаи можем да използваме стандартната функция error Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

11 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) n < 0 = error "подадено отрицателно число" fact (-5) Грешка! добра практика е да имаме изчерпателни случаи можем да използваме стандартната функция error Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

12 Разглеждане на случаи Разглеждане на случаи примери fact n n == 0 = 1 n > 0 = n * fact (n - 1) n < 0 = error "подадено отрицателно число" fact (-5) Грешка! добра практика е да имаме изчерпателни случаи можем да използваме стандартната функция error grade x x >= 5.5 = "Отличен" x >= 4.5 = "Много добър" x >= 3.5 = "Добър" x >= 3 = "Среден" otherwise = "Слаб" Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 3 / 15

13 Локални дефиниции Локални дефиниции с let let { <дефиниция> } + in <тяло> Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 4 / 15

14 Локални дефиниции Локални дефиниции с let let { <дефиниция> } + in <тяло> let <дефиниция 1 > <дефиниция 2 >... <дефиниция n > in <тяло> Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 4 / 15

15 Локални дефиниции Локални дефиниции с let let { <дефиниция> } + in <тяло> let <дефиниция 1 > <дефиниция 2 >... <дефиниция n > in <тяло> <дефиниция i > се въвеждат едновременно областта на действие на дефинициите е само в рамките на let конструкцията може да са взаимно рекурсивни Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 4 / 15

16 Локални дефиниции Примери за let let x = 5 in x Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 5 / 15

17 Локални дефиниции Примери за let let x = 5 in x let f x = y + x? y = 7 in f 2 * y Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 5 / 15

18 Локални дефиниции Примери за let let x = 5 in x let f x = y + x 63 y = 7 in f 2 * y Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 5 / 15

19 Локални дефиниции Примери за let let x = 5 in x let f x = y + x 63 y = 7 in f 2 * y fact2 n = let fact n = if n == 0 then 1 else n * fact (n-1) in (fact n)ˆ2 Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 5 / 15

20 Локални дефиниции Примери за let let x = 5 in x let f x = y + x 63 y = 7 in f 2 * y fact2 n = let fact n = if n == 0 then 1 else n * fact (n-1) in (fact n)ˆ2 В интерактивен режим (GHCi) let може да се използва без in за въвеждане на нови дефиниции Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 5 / 15

21 Локални дефиниции Локални дефиниции с where <дефиниция-на-функция> where { <дефиниция> } + Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 6 / 15

22 Локални дефиниции Локални дефиниции с where <дефиниция-на-функция> where { <дефиниция> } + <дефиниция-на-функция> where <дефиниция 1 > <дефиниция 2 >... <дефиниция n > Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 6 / 15

23 Локални дефиниции Локални дефиниции с where <дефиниция-на-функция> where { <дефиниция> } + <дефиниция-на-функция> where <дефиниция 1 > <дефиниция 2 >... <дефиниция n > <дефиниция i > се въвеждат едновременно областта на действие на дефинициите е само в рамките на дефиницията на <функция> може да са взаимно рекурсивни Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 6 / 15

24 Локални дефиниции Примери за where sumlastdigits n = lastdigit n + lastdigit (stripdigit n) where lastdigit = ( mod 10) stripdigit = ( div 10) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 7 / 15

25 Локални дефиниции Примери за where sumlastdigits n = lastdigit n + lastdigit (stripdigit n) where lastdigit = ( mod 10) stripdigit = ( div 10) quadratic a b c a == 0 = "линейно уравнение" d > 0 = "две реални решения" d == 0 = "едно реално решение" otherwise = "няма реални решения" where d = b^2-4*a*c Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 7 / 15

26 Локални дефиниции Пример за комбиниране на let и where area x1 y1 x2 y2 x3 y3 = let a = dist x1 y1 x2 y2 b = dist x2 y2 x3 y3 c = dist x3 y3 x1 y1 p = (a + b + c) / 2 in sqrt (p * (p - a) * (p - b) * (p - c)) where dist u1 v1 u2 v2 = sqrt (du^2 + dv^2) where du = u2 - u1 dv = v2 - v1 Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 8 / 15

27 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

28 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз where може да се използва само в рамките на дефиниция Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

29 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз where може да се използва само в рамките на дефиниция where дефинициите са видими при всички случаи с пазачи Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

30 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз where може да се използва само в рамките на дефиниция where дефинициите са видими при всички случаи с пазачи let са удобни когато има само едно <тяло> Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

31 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз where може да се използва само в рамките на дефиниция where дефинициите са видими при всички случаи с пазачи let са удобни когато има само едно <тяло> стилистична разлика: Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

32 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз where може да се използва само в рамките на дефиниция where дефинициите са видими при всички случаи с пазачи let са удобни когато има само едно <тяло> стилистична разлика: с let помощните дефиниции се дават първи Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

33 Локални дефиниции Сравнение на let и where let е израз, който може да участва във всеки израз where може да се използва само в рамките на дефиниция where дефинициите са видими при всички случаи с пазачи let са удобни когато има само едно <тяло> стилистична разлика: с let помощните дефиниции се дават първи с where акцентът пада върху основната дефиниция Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 9 / 15

34 Двумерен синтаксис Подравняване на дефинициите let h = f + g b x = 2 in b h Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 10 / 15

35 Двумерен синтаксис Подравняване на дефинициите let h = f + g b x = 2 in b h а защо не: let h = f + g b x = 2 in b h Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 10 / 15

36 Двумерен синтаксис Подравняване на дефинициите let h = f + g b x = 2 in b h а защо не: let h = f + g b x = 2 in b h Подравняването в Haskell има значение! Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 10 / 15

37 Двумерен синтаксис Подравняване на дефинициите let h = f + g b x = 2 in b h а защо не: let h = f + g b x = 2 in b h Подравняването в Haskell има значение! Обхватът на блок от дефиниции се определя от това как са подравнени. Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 10 / 15

38 Двумерен синтаксис Подравняване на дефинициите let h = f + g b x = 2 in b h а защо не: let h = f + g b x = 2 in b h Подравняването в Haskell има значение! Обхватът на блок от дефиниции се определя от това как са подравнени. Дефинициите вдясно и надолу от първата са в същия блок Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 10 / 15

39 Двумерен синтаксис Подравняване на дефинициите let h = f + g b x = 2 in b h а защо не: let h = f + g b x = 2 in b h Подравняването в Haskell има значение! Обхватът на блок от дефиниции се определя от това как са подравнени. Дефинициите вдясно и надолу от първата са в същия блок Дефинициите вляво са във външния блок Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 10 / 15

40 Двумерен синтаксис Двумерен синтаксис пример area x1 y1 x2 y2 x3 y3 = let a = dist x1 y1 x2 y2 b = dist x2 y2 x3 y3 c = dist x3 y3 x1 y1 p = (a + b + c) / 2 in sqrt (p * (p - a) * (p - b) * (p - c)) where dist u1 v1 u2 v2 = sqrt (duˆ2 + dvˆ2) where du = u2 - u1 dv = v2 - v1 Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 11 / 15

41 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

42 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

43 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

44 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Интуитивни правила: Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

45 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Интуитивни правила: при първия символ на дефиниция запомни позицията и сложи { Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

46 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Интуитивни правила: при първия символ на дефиниция запомни позицията и сложи { начало на дефиниция по-надясно или по-надолу сложи ; Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

47 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Интуитивни правила: при първия символ на дефиниция запомни позицията и сложи { начало на дефиниция по-надясно или по-надолу сложи ; начало на дефиниция по-наляво сложи } Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

48 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Интуитивни правила: при първия символ на дефиниция запомни позицията и сложи { начало на дефиниция по-надясно или по-надолу сложи ; начало на дефиниция по-наляво сложи } Пазачите не използват синтаксис за блокове, можем безопасно да ги пишем и на един ред: Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

49 Двумерен синтаксис Алтернативен синтаксис за блокове Всъщност подравняването е синтактична захар за блок в Haskell { { <дефиниция> ; } } { <дефиниция 1 > ;... <дефиниция n > [;] } Интуитивни правила: при първия символ на дефиниция запомни позицията и сложи { начало на дефиниция по-надясно или по-надолу сложи ; начало на дефиниция по-наляво сложи } Пазачите не използват синтаксис за блокове, можем безопасно да ги пишем и на един ред: fact n n == 0 = 1 otherwise = n * fact (n-1) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 12 / 15

50 Образци Поредица от равенства Можем да дефинираме функция с поредица от равенства: fact 0 = 1 fact n = n * fact (n-1) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 13 / 15

51 Образци Поредица от равенства Можем да дефинираме функция с поредица от равенства: fact 0 = 1 fact n = n * fact (n-1) Можем да имаме произволен брой равенства... fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n-2) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 13 / 15

52 Образци Поредица от равенства Можем да дефинираме функция с поредица от равенства: fact 0 = 1 fact n = n * fact (n-1) Можем да имаме произволен брой равенства... fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n-2)... или варианти за различните параметри gcd 0 0 = error "няма най-голям общ делител" gcd x 0 = x gcd 0 y = y gcd x y x > y = gcd (x-y) y otherwise = gcd x (y-x) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 13 / 15

53 Образци Образци Как се разбира кое равенство да се използва? Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

54 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

55 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

56 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

57 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Видове образци: Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

58 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Видове образци: литерали пасват при точно съвпадение Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

59 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Видове образци: литерали пасват при точно съвпадение променливи пасват винаги Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

60 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Видове образци: литерали пасват при точно съвпадение променливи пасват винаги анонимен образец _ пасва винаги без да свързва фактическата стойност с име Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

61 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Видове образци: литерали пасват при точно съвпадение променливи пасват винаги анонимен образец _ пасва винаги без да свързва фактическата стойност с име Пример: (&&) False _ = False (&&) _ b = b Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

62 Образци Образци Как се разбира кое равенство да се използва? Видът на формалните параметри наричаме образец Търси се на кой образец пасва фактическия параметър Избира се първият образец отгоре надолу Видове образци: литерали пасват при точно съвпадение променливи пасват винаги анонимен образец _ пасва винаги без да свързва фактическата стойност с име Пример: False && _ = False _ && b = b Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 14 / 15

63 Образци Повторение на променливи Можем ли да напишем gcd 0 0 = error "няма най-голям общ делител" gcd x 0 = x gcd 0 y = y gcd x x = x gcd x y x > y = gcd (x-y) y otherwise = gcd x (y-x) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 15 / 15

64 Образци Повторение на променливи Можем ли да напишем gcd 0 0 = error "няма най-голям общ делител" gcd x 0 = x gcd 0 y = y gcd x x = x gcd x y x > y = gcd (x-y) y otherwise = gcd x (y-x) Не! Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 15 / 15

65 Образци Повторение на променливи Можем ли да напишем gcd 0 0 = error "няма най-голям общ делител" gcd x 0 = x gcd 0 y = y gcd x x = x gcd x y x > y = gcd (x-y) y otherwise = gcd x (y-x) Не! Всички променливи в образците трябва да са уникални Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 15 / 15

66 Образци Повторение на променливи Можем ли да напишем gcd 0 0 = error "няма най-голям общ делител" gcd x 0 = x gcd 0 y = y gcd x x = x gcd x y x > y = gcd (x-y) y otherwise = gcd x (y-x) Не! Всички променливи в образците трябва да са уникални Няма унификация, както в Пролог Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 15 / 15

67 Образци Повторение на променливи Можем ли да напишем gcd 0 0 = error "няма най-голям общ делител" gcd x 0 = x gcd 0 y = y gcd x x = x gcd x y x > y = gcd (x-y) y otherwise = gcd x (y-x) Не! Всички променливи в образците трябва да са уникални Няма унификация, както в Пролог Има езици за функционално и логическо програмиране, в които това е позволено (напр. Curry) Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016 г. 15 / 15

-

- Лениво оценяване и програмиране от по-висок ред Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 7 януари 2016 г. Трифон Трифонов (ФП-И 15/16) Лениво оценяване 7 януари 2016 г.

Подробно

C++

C++ Управляващи оператори в C++ Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 18 30 октомври 2018 г. Трифон Трифонов (УП 18/19) Управляващи оператори в C++ 18 30 октомври

Подробно

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари 2017 г. Трифон Трифонов (УП 16/17) Рекурсия 21.12.16

Подробно

Програмиране на Паскал

Програмиране на Паскал Поради връзката на С++ с езика С в голяма част от литературата е прието записването С/С++. Това е найизползваният език за програмиране в света, поради което синтаксисът на някои от по-новите езици като

Подробно

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Трифон Трифонов (УП 16/17) Динамична памет 21 декември

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Трифон Трифонов (УП 16/17) и низове 9 ноември 2016 г. 1 / 5 Логическо

Подробно

Slide 1

Slide 1 Списъци. Структура и синтаксис. Създаване и показване. Основни операции(добавяне, изваждане на елемент или цял подсписък; подреждане). Трансформации. проф. дмн С. Христова Списъци Списъците / list са основна

Подробно

Lush Green

Lush Green Класове Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях Дефиниция

Подробно

Проф

Проф Утвърдил:.. / доц. д-р Е. Великова / Утвърден от Факултетен съвет с протокол... /... СОФИЙСКИ УНИВЕРСИТЕТ СВ. КЛИМЕНТ ОХРИДСКИ Факултет по Математика и Информатика Специалност: Компютърни науки М И К 0

Подробно

Виртуални функции

Виртуални функции Виртуални функции Статично свързване Как компилаторът избира кой метод или коя функция да бъде извикана? Прави се сравнение между формални и фактически параметри и се избира най-точното съвпадение в случай,

Подробно

Lush Green

Lush Green Конструктори Жизнен цикъл на обект За обекта се заделя памет и се свързва с неговото име Извиква се подходящ конструктор на обекта... (достъп до компоненти на обект, изпълняване на операции) Достига се

Подробно

Microsoft Word - VM22 SEC55.doc

Microsoft Word - VM22 SEC55.doc Лекция 5 5 Диференциални уравнения от първи ред Основни определения Диференциално уравнение се нарича уравнение в което участват известен брой производни на търсената функция В общия случай ( n) диференциалното

Подробно

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението 3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението представя кратко въведение в синтактичния анализ.

Подробно

1. Инструментални средства на изкуствения интелект. Основната характеристика на програмните системи, базирани на знания, отличаваща ги от стандартните

1. Инструментални средства на изкуствения интелект. Основната характеристика на програмните системи, базирани на знания, отличаваща ги от стандартните 1. Инструментални средства на изкуствения интелект. Основната характеристика на програмните системи, базирани на знания, отличаваща ги от стандартните програмни системи, е използването на знания в тях.

Подробно

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 6 април 2017 г. Трифон Трифонов

Подробно

Информатика

Информатика ХИМИКОТЕХНОЛОГИЧЕН И МЕТАЛУРГИЧЕН УНИВЕРСИТЕТ - СОФИЯ ИНФОРМАТИКА част първа лектор: доц. д-р Атанас Атанасов Катедра Програмиране и използване на компютърни системи Лекция 3 ЛОГИЧЕСКИ ОСНОВИ НА КОМПЮТЪРНИТЕ

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 29 ноември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15 29 ноември 2018 г. 1 / 16 Масиви Логическо

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1 Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15.11-6.12.2018 г. 1 / 17 Масиви

Подробно

Резултати от редовен изпит по Химия г. Вх. Вх. Пол Словом Оценка номер номер Пол Словом Оценка 7500 Жена Много добър Жена Среден

Резултати от редовен изпит по Химия г. Вх. Вх. Пол Словом Оценка номер номер Пол Словом Оценка 7500 Жена Много добър Жена Среден 7500 Жена Много добър 5.35 7579 Жена Среден 3.00 7501 Жена Отличен 5.65 7580 Мъж Слаб 2.00 7502 Жена Слаб 2.00 7581 Жена Добър 3.65 7504 Мъж Отличен 5.50 7583 Жена Отличен 5.55 7507 Жена Отличен 5.60 7586

Подробно

Резултати от предварителен изпит по Биология г. Вх. Номер Пол Словом Цифром Вх. Номер Пол Словом Цифром 1000 Жена Много добър Жен

Резултати от предварителен изпит по Биология г. Вх. Номер Пол Словом Цифром Вх. Номер Пол Словом Цифром 1000 Жена Много добър Жен 1000 Жена Много добър 5.19 1050 Жена Отличен 6.00 1001 Жена Много добър 5.25 1051 Жена Много добър 5.32 1002 Жена Много добър 5.32 1052 Жена Много добър 5.19 1003 Мъж Отличен 5.75 1053 Жена Много добър

Подробно

Homework 3

Homework 3 Домашно 3 по дисциплината Дискретни структури за специалност Информатика I курс летен семестър на 2015/2016 уч г в СУ ФМИ Домашната работа се дава на асистента в началото на упражнението на 25 26 май 2016

Подробно

16. Основни методи за интегриране. Интегриране на някои класове функции Интегриране по части. Теорема 1 (Формула за интегриране по части). Ако

16. Основни методи за интегриране. Интегриране на някои класове функции Интегриране по части. Теорема 1 (Формула за интегриране по части). Ако 6. Основни методи за интегриране. Интегриране на някои класове функции. 6.. Интегриране по части. Теорема (Формула за интегриране по части). Ако функциите f(x) и g(x) садиференцируеми в интервала (a, b)

Подробно

Microsoft Word - PRMAT sec99.doc

Microsoft Word - PRMAT sec99.doc Лекция 9 9 Изследване на функция Растене, намаляване и екстремуми В тази лекция ще изследваме особеностите на релефа на графиката на дадена функция в зависимост от поведението на нейната производна Основните

Подробно

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА У Ч Е Б Н А П Р О Г Р А М А ЗА ЗАДЪЛЖИТЕЛНА ПРОФЕСИОНАЛНА ПОДГОТОВКА ПО ПРОГРАМИРАНЕ И АЛГОРИТМИЧНИ ЕЗИЦИ ЗА ПРОФЕСИЯ: КОД 482010 ИКОНОМИСТ - ИНФОРМАТИК СПЕЦИАЛНОСТ:

Подробно

ЛЕКЦИЯ 6 ЗАКОН ЗА ИНЕРЦИЯТА Определение. Броят на положителните коефициенти в каноничния вид на дадена квадратична форма се нарича положителен индекс

ЛЕКЦИЯ 6 ЗАКОН ЗА ИНЕРЦИЯТА Определение. Броят на положителните коефициенти в каноничния вид на дадена квадратична форма се нарича положителен индекс ЛЕКЦИЯ 6 ЗАКОН ЗА ИНЕРЦИЯТА Определение. Броят на положителните коефициенти в каноничния вид на дадена квадратична форма се нарича положителен индекс на инерцията на тази квадратична форма. Броят на отрицателните

Подробно

Microsoft Word - Sem02_KH_VM2-19.doc

Microsoft Word - Sem02_KH_VM2-19.doc Семинар Действия с матрици. Собствени стойности и собствени вектори на матрици. Привеждане на квадратична форма в каноничен вид. Матрица k всяка правоъгълна таблица от k-реда и -стълба. Квадратна матрица

Подробно

110 (Глава 2. Тензорен анализ 12. Диференциални операции в криволинейни координати Градиент на скаларно поле. Дефиницията (11.5) на градиента чр

110 (Глава 2. Тензорен анализ 12. Диференциални операции в криволинейни координати Градиент на скаларно поле. Дефиницията (11.5) на градиента чр 0 (Глава 2. Тензорен анализ 2. Диференциални операции в криволинейни координати 2.. Градиент на скаларно поле. Дефиницията (.5) на градиента чрез производната по направление позволява лесно да намерим

Подробно

Mathematica CalcCenter

Mathematica CalcCenter Mathematica CalcCenter Основни възможности Wolfram Mathematica CalcCenter е разработен на базата на Mathematica Professional и първоначално е бил предназначен за технически пресмятания. Информация за този

Подробно

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision :

Подробно

Машинно обучение - въведение

Машинно обучение - въведение Линейна регресия с една променлива Доц. д-р Ивайло Пенев Кат. Компютърни науки и технологии Пример 1 Данни за цени на къщи Площ (x) Означения: Цена в $ (y) 2104 460 000 1416 232 000 1534 315 000 852 178

Подробно

Квадратно уравнение ax 2 + bx + c = 0 = a(x x 1 )(x x 2 ) x 1,2 = b ± b2 4ac 2a Формули за съкратено умножение (a + b) 2 = a 2 + 2ab + b 2 (a b) 2 = a

Квадратно уравнение ax 2 + bx + c = 0 = a(x x 1 )(x x 2 ) x 1,2 = b ± b2 4ac 2a Формули за съкратено умножение (a + b) 2 = a 2 + 2ab + b 2 (a b) 2 = a Квадратно уравнение + + c = = ( )( ), = ± 4c Формули за съкратено умножение ( + ) = + + ( ) = + ( )( + ) = ( + ) = + + + ( ) = + ( + )( + ) = + ( )( + + ) = Правила за степенуване m = +m : m = = m m (

Подробно

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 9 март 2005 г. template< class

Подробно

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23 Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23 Указатели! Калин Георгиев Увод в програмирането 21

Подробно

Семинар 1: Комплексни числа. Функции на комплексна променлива.

Семинар 1: Комплексни числа. Функции на комплексна променлива. Семинар 1: Комплексни числа. Функции на комплексна променлива. Комплексно число, с: c z (, ) + + j а Re[c] реална част; Im[c] имагинерна част; j 1 r c + - модул на комплексното число (к. ч.). tg ϕ, ϕ rg

Подробно

Структура на програма в C - Част 6 - goto, switch, break и continue клаузи

Структура на програма в C - Част 6 - goto, switch, break и continue клаузи Структура на програма в C Част 6 - goto, switch, break и continue клаузи Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 21 април

Подробно

Microsoft Word - Lecture 14-Laplace Transform-N.doc

Microsoft Word - Lecture 14-Laplace Transform-N.doc Лекция 4: Интегрално преобразувание на Лаплас 4.. Дефиниция и образи на елементарните функции. Интегралното преобразувание на Лаплас Laplac ranorm се дефинира посредством израза: Λ[ ] преобразувание на

Подробно

Частично рекурсивни, рекурсивни и примитивно рекурсивни функции. Рекурсивни и рекурсивно номеруеми множества Този текст съдържа някои сведения от теор

Частично рекурсивни, рекурсивни и примитивно рекурсивни функции. Рекурсивни и рекурсивно номеруеми множества Този текст съдържа някои сведения от теор Частично рекурсивни, рекурсивни и примитивно рекурсивни функции. Рекурсивни и рекурсивно номеруеми множества Този текст съдържа някои сведения от теорията на изчислимостта, които ще се предполагат известни

Подробно

ПРОГРАМНО ОСИГУРЯВАНЕ НА КОМПЮТЪРА

ПРОГРАМНО ОСИГУРЯВАНЕ НА КОМПЮТЪРА СРЕДИ ЗА ПРОГРАМИРАНЕ ПРОГРАМНО ОСИГУРЯВАНЕ НА КОМПЮТЪРА Същност на програмното осигуряване За да могат компютрите да разбират описаните на езика за програмиране алгоритми, те трябва да бъдат преведени

Подробно

ЕКСПЛОДИРАЩИ ТОЧКИ ГЛАВА 1 МАШИНИ Добре дошли на борда на нашето приключение. Това е математическо приключение базирано върху една моя история (аз съм

ЕКСПЛОДИРАЩИ ТОЧКИ ГЛАВА 1 МАШИНИ Добре дошли на борда на нашето приключение. Това е математическо приключение базирано върху една моя история (аз съм ЕКСПЛОДИРАЩИ ТОЧКИ ГЛАВА 1 МАШИНИ Добре дошли на борда на нашето приключение. Това е математическо приключение базирано върху една моя история (аз съм Джеймс), която не е истинска. Когато бях дете, аз

Подробно

Microsoft Word - Tema-8-klas-PLOVDIV.doc

Microsoft Word - Tema-8-klas-PLOVDIV.doc МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА СЪЮЗ НА МАТЕМАТИЦИТЕ В БЪЛГАРИЯ Пролетен математически турнир 7 9 март 9 г., ПЛОВДИВ Тема за 8 клас Задача. Дадено е уравнението ax + 9 = x + 9ax 8x, където a е

Подробно

Homework 2

Homework 2 Домашна работа 2 по Дизайн и анализ на алгоритми за специалност Компютърни науки, 2. курс, 1. поток СУ, ФМИ, летен семестър на 2017 / 2018 уч. г. СЪСТАВЯНЕ НА АЛГОРИТМИ Задача 1 2 3, а 3, б 3, в Общо получен

Подробно

Microsoft Word - Sem03+04sup_KH_VM2-11.doc

Microsoft Word - Sem03+04sup_KH_VM2-11.doc Връзка между символ на Кронекер (Conece delta i ) и символ на Леви Чивита (Levi-Civita symbol ε i ) Примери от векторния анализ Всички разглеждания се правят за случая на тримерно евклидово пространство

Подробно

Microsoft Word - nbb2.docx

Microsoft Word - nbb2.docx Коректност на метода на характеристичното уравнение за решаване на линейно-рекурентни уравнения Стефан Фотев Пиша този файл, тъй като не успях да намеря в интернет кратко и ясно обяснение на коректността

Подробно

4

4 Наследяване и 4 Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 11 май 2017 г. Трифон Трифонов (ООП 16/17) Наследяване и голямата

Подробно