ФПР

अब Quizwiz के साथ अपने होमवर्क और परीक्षाओं को एस करें!

Правила за оценяване на числа, низове, имена и вградени оператори:

- оценката на дадено число е самото число; - оценката на даден низ е самият низ; - оценката на даден вграден оператор е поредицата от машинни инструкции, които реализират този оператор; - оценките на останалите имена (в частност, оценките на променливите) са стойностите, свързани с тези имена в текущата среда. Оценките на вградените оператори (т.е. на примитивните процедури) също могат да се смятат за част от средата.

Общ вид на процедура foldl/foldr в езика Racket

В Racket има вградени функции foldl и foldr, които действат подобно на accum: foldl акумулира (натрупва) по дадено правило елементите на даден списък в посока от ляво надясно, а foldr акумулира (натрупва) елементите на даден списък в посока от дясно наляво.Общ вид на fold,foldr:(foldl/r <функция> <акумулатор> <източник>) Примери: (foldr cons '() '(1 2 3 4)) ──> (1 2 3 4) (foldl cons '() '(1 2 3 4)) ──> (4 3 2 1)

Обяснете понятието "примитивна рекурсия върху списъци" в езика Haskell и дайте пимер

В дефиниция, която реализира примитивна рекурсия, се описват следните типове случаи: • начален (прост, базов) случай: например тук се описва стойността на функцията при подаден празен списък[ ]; • общ случай, при който се посочва връзката между стойността на функцията за дадена стойност на аргумента (в случая sum (x:xs)) и стойността на функцията за по-проста в определен смисъл стойност на аргумента (sum xs). Пример: sum :: [Int] -> Int sum [] = 0 sum (x:xs) = x + sum xs

Обясни понятието "точкова двойка/двойка" в езика Racket

В езика Racket, понятието "точкова двойка" се отнася до структура, която представлява две стойности, обединени в един обект. Точковите двойки се използват за съхранение на две различни стойности, които могат да бъдат от различни типове.

Обясни понятието "съставен тип данни"

В езика Racket, съставените типове данни представляват структури, които съдържат по-прости типове. Те се формират чрез групиране на прости типове и се използват за съхранение на различни видове данни.

Дайте определение на понятието "вектор" в Haskell

Векторът (tuple) представлява наредена n-торка от елементи, при това броят n на тези елементи и техните типове трябва да бъдат определени предварително. Допуска се елементите на векторите да бъдат от различни типове

Обяснете понятието "производен тип" в езика Haskell. Дай пример

Вместо използването на вектори можем да дефинираме тип с определен брой компоненти като алгебричен тип. Такива типове често се наричат производни типове (резултатни типове; product types). Пример data People = Person Name Age type Name = String type Age = Int Примери за стойности от тип People: Person "Aunt Jemima" 77 Person "Ronnie" 14

Дай определение на понятието среда в езика Racket

Всяка променлива в програма на езика Racket би трябвало да се разглежда като означение на определено „място", в което се съхранява свързаната с нея стойност. В така наречения модел на средите тези „места" са елементи на специални таблици, наречени среди

Обяснете понятието "частично прилагане на функция" в езика Haskell. Дайте пример

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

Дайте определение на понятието "локална промелива" в езика Haskell

Възможно е да се дефинират локални променливи с област на действие, която съвпада с даден израз с помощта на let изразите. Пример: let x = 3+2 in x^2 + 2*x - 4 има стойност 31. let x = 3+2; y = 5-1 in x^2 + 2*x - y има стойност 31

Обяснете понятието "алтернативен тип" в езика Haskell. Дай пример

Геометричните фигури могат да имат различна форма, например кръгла или правоъгълна. Тези алтернативи могат да бъдат включени в дефиниция на тип от вида data Shape = Circle Float | Rectangle Float Float !Съществуват два алтернативни начина за конструиране на елемент на Shape. Примерни данни (обекти) от тип Shape: Circle 3.0 Rectangle 45.9 87.6 Дефиниции на функции върху типа Shape: isRound :: Shape -> Boo1 isRound (Circle _) = True isRound (Rectangle _ _) = False

Как се дефинира двойчно дърво от конкретен тип. А двойчно дърво от произволен тип

Двойчно дърво от конкретен тип data Tree = Nil | Node Int Tree Tree Двойчно дърво от произволен тип data Tree a = Nil | Node a (Tree a) (Tree a) deriving (Eq,Show,Read) depth :: Tree a -> Int depth Nil = 0 depth (Node n t1 t2) = 1 + max (depth t1) (depth t2) Намиране на сумата от върховете на двоично дърво от цели числа: sumOfElements :: Tree Int -> Int sumOfElements Nil = 0 sumOfElements (Node n leftTree rightTree) = n +sumOfElements leftTree + sumOfElements rightTree

Дайте определение на понятието "деструктивна процедура" в езика Racket

Деструктивна процедура е процедура, която променя (част от) аргументите си

Обяснете понятието "дефиниране на функция на функционално ниво" в езика Haskell. Дайте пример

Дефинирането на някаква функция на функционално ниво предполага действието на тази функция да се опише не в термините на резултата, който връща тя при прилагане към подходящо множество от аргументи, а като директно се посочи връзката ѝ с други функции. Пример. twice :: (a -> a) -> (a -> a) Двукратно прилагане на функция. twice f = (f . f) succ :: Int -> Int Намиране на следващ елемент succ n = n + 1 Тогава (twice succ) 12 -> (succ . succ) 12 -> succ (succ 12) -> 14

Как се дефинира на променлива

Дефинирането на променлива се извършва с помощта на оператора (примитивната процедура) define. Интерпретаторът свързва името <име> със стойността (оценката) на <израз> СИНТАКСИС: (define <име> <израз>) Пример (define size 2) > size 2

как се дефинира функция върху алгебрични типове

Дефинирането на функции върху такива типове се извършва с помощта на стандартните техники, например с използване на подходящи образци: weather :: Season -> Temp weather Summer = Hot weather _ = Cold

Обяснете понятието "полиморфен тип" в езика Haskell. Дай пример

Дефинициите на алгебрични типове могат да съдържат променливи на типове (типови променливи, type variables) a, b и т.н. По този начин се дефинират полиморфни типове. Пример data Pairs a = Pr a a Примерни елементи на този тип: Pr 2 3 :: Pairs Int Pr [ ] [3] :: Pairs [Int] Pr [ ] [ ] :: Pairs [a]

Обяснете понятието "алгебричен тип" в езика Haskell. Дай пример

Дефиницията на един алгебричен тип започва с ключовата дума data, след която се записват името на типа, знак за равенство и конструкторите на типа. Името на типа и имената на конструкторите задължително започват с главни букви. Пример data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday

Обясни понятието "дървовиден рекурсивен процес"

Дървовиден рекурсивен процес в Scheme е вид рекурсия, при който процесът на изчисление се разгръща като дърво. Това обикновено се случва, когато имаме рекурсивна функция, която прави повече от едно рекурсивно извикване

Дайте определение на понятието "частично пресмятане" в езика Racket

За да се постигне частично оценяване се използва специалната форма delay. В резултат на оценяването на обръщението (delay <израз>) се получава „пакетиран" („отложен") вариант на <израз>, който позволява реалното оценяване на <израз> да се извърши едва тогава, когато това е абсолютно необходимо. По-точно, „пакетираният" израз, който е оценка на обръщението към delay, може да бъде използван за възобновяване на оценяването на <израз> с помощта на процедурата force. Force и delay са примитияни процедури(вградени) Примерни дефиниции:(delay <израз>) ──> (lambda () <израз>)(define (force delayed-object) (delayed-object))

Обяснете понятието "изброен тип" в езика Haskell. Дай пример

Изброените типове са най-простата разновидност на алгебричния тип. Дефинира се чрез изброяване на елементите на типа. Примери за изброени типове: data Temp = Cold | Hot data Season = Spring | Summer | Autumn | Winter

Дайте определение на понятието "overloading"(додефиниране на оператора) в езика Haskell

Използването на едно и също име за означаване на различни операции се нарича overloading (додефиниране на оператора) Пример. Както целите числа, така и Булевите стойности така и всеки друг тип променливи могат да бъдат сравнявани за равенство (съвпадение, еквивалентност) с помощта на оператора ==.

Какви методи за оценяване съществуват? Кой се използва от интерпретатора на езика Racket? Дай пример.

Има 2 метода за оценяване: апликативен и нормален. В Scheme интерпретатора използва апликативния метод Пример (define (square x) (* x x)) (define (sum-of-sq x y) (+ (square x) (square y))) (define (f a) (sum-of-sq (+ a 1) (* a 2))) (f 5) --деф. На f ->(sum-of-sq (+ a 1) (* a 2)) --зам. На парам.-> (sum-of-sq (+ 5 1) (* 5 2)) --апликат. метод-> (sum-of-sq 6 10) --деф. на sum-of-sq-> (+ (square 6) (square 10)) --оценка на комбинация-> (+ (* 6 6) (* 10 10)) --сем. на *-> (+ 36 100) -сем. на +-> 136

Обясни понятието "итеративен процес"

Итеративните процеси описват състоянието на изчисленията във всеки момент от няколко променливи на състоянието(state variables) и правило, с чиято помощ се извършва преходът от дадено състояние към следващото.

Обяснете понятието "ламбда израз" в езика Haskell. Дайте пример

Ламбда изрази в Haskell се използват за дефиниране на анонимни(безименни функции) \x y -> x^2 + y \x -> x `mod` 2 == 0

Обясни понятието "линейна рекурсия"

Линейната рекурсия включва (поражда) само едно рекурсивно обръщение към същата процедура с опростени аргументи.

Обясни понятието "логаритмичен итеративен процес"

Логаритмичен итеративен процес е итеративен процес, при който броят на стъпките расте логаритмично с нарастването на аргумента n (т.е. е логаритмична функция на n)

Обобщение на Моделът на средите за оценяване на обръщения към съставни процедури

Моделът на средите за оценяване на обръщения към съставни процедури може да бъде обобщен (формулиран) както следва: 1) Дадена процедура се прилага към определено множество от аргументи чрез конструиране на специална таблица, която съдържа свързвания на формалните параметри на процедурата със съответните фактически параметри (аргументите) на обръщението, последвано от оценяване на тялото на (дефиницията на) процедурата в контекста на новопостроената среда. При това новопостроената таблица има за родителска (обхващаща) среда същата среда, която се сочи от указателя към средата в представянето на (дефиницията на) прилаганата процедура. 2) Процедура се създава чрез оценяване на определен lambda израз в съответната среда. В резултат се създава специален обект (процедура), който може да се разглежда като двойка, съдържаща текста на lambda израза и указател към средата, в която е създадена процедурата.

Обяснете понятието "образец"(pattern) в езика Haskell. Дайте 3 примера за различни типове образци

Образците(patterns) в езика Haskell се използват, за да опишат различни възможни случаи за стойността на дадена функция Образецът (pattern) може да бъде: • Литерал като например 24, 'f' или True • Променлива като например x или longVariableName; • Специален символ за безусловно съпоставяне (wildcard) '_', който е съпоставим с произволен аргумент; • Вектор-образец (p1,p2, ... ,pn); за да бъде съпоставим с него, аргументът трябва да има вида (v1,v2, ... ,vn), като всяко vi трябва да бъде съпоставимо със съответното pi; • Конструктор, приложим към даденото множество от аргументи.

Общ вид на съставна процедура

Общ вид на обръщението към define в случая на дефиниране на съставна процедура: (define (<име> <формални параметри>) <тяло>) Тук: - <име> е символ (идентификатор), който задава името на процедурата; - <формални параметри> са имената, използвани в тялото на дефиницията за означаване на аргументите на процедурата; - <тяло> е поредица от изрази (най-често - един израз). В процеса на оценяване на обръщението към define се осъществява свързване на <име> с тялото на дефиницията в текущата среда. По такъв начин <име> вече е име на съставна процедура, която е комбинация на други процедури.

Каква е областта на действие на локалните имена, дефинирани със специална форма let* в езика Racket

Общ вид на обръщението към let*: (let* ([ <пром1> <изр1>] [ <пром2> <изр2>] . . . [ <промN> <изрN>]) <тяло>) Семантика. Оценява се <изр1> и <пром1> се свързва с [<изр1>]. Оценява се <изр2> и <пром2> се свързва с [<изр2>]. При това, ако в <изр2> се среща <пром1>, при оценяването на <изр2> се използва току-що свързаната с [<изр1>] оценка на <пром1>. По същия начин се продължава със свързване на следващите локални променливи (имена), докато се достигне до последната. Тогава се оценява <изрN> и <промN> се свързва с [<изрN>]. Ако в <изрN> се срещат някои от имената <промi>, i<N при оценяването им се използват току-що свързаните с тях оценки. При така получените свързвания се оценява <тяло>

Каква е областта на действие на локалните имена, дефинирани със специална форма let в езика Racket

Общ вид на обръщението към let: (let ([ <пром1> <изр1>] [ <пром2> <изр2>] . . . [ <промN> <изрN>]) <тяло>) Семантика. Всяка променллива <промi> се свързва с оценката на съответния израз<изрi> . След това изразите от се оценяват последователно в локалната среда, получена чрез допълване на текущата среда (съществуващата до този момент среда) с новите свързвания. Оценката на последния израз от се връща като оценка на обръщението към let.

Каква е областта на действие на локалните имена, дефинирани със специална форма letrec в езика Racket

Общ вид на обръщението към letrec: (letrec ([ <пром1> <изр1>] [ <пром2> <изр2>] . . . [ <промN> <изрN>]) <тяло>) Синтаксис. Тук обаче всяка от променливите <пром1>, <пром2>, ... , <промN>може да се среща във всеки от изразите <изр1>, <изр2>, ... , <изрN>. При това тези променливи (имена) се разглеждат като локално дефинираните променливи (имена) <пром1>, <пром2>, ... , <промN> и следователно е възможно при дефинирането им да се използва рекурсия. С други думи, областта на действие на всяка от променливите <пром1>, <пром2>, ... , <промN> в случая на letrec съвпада с <изр1>, <изр2>, ... , <изрN> и <тяло>.

Общ вид и действие на процедура set! в езика Racket

Общ вид на примитивна процедура за присвояване set!: (set! <име на променлива> <израз>) Действие. Оценява се <израз> и на променливата <име на променлива> (която предварително трябва да бъде дефинирана - например с помощта на define) се присвоява нова стойност, равна на [<израз>]. Оценката на обръщението към set! по стандарт е неопределена (#<void>).

Общ вид и действие на процедура apply в езика Racket

Общ вид на примитивната процедура apply: (apply <процедура> <списък-от-арг>) Действие. Оценяват се <процедура> и <списък-от-арг>) . Нека [<списък-от-арг>] е (arg1 arg2 ... argn). Процедурата apply предизвиква прилагане на процедурата [<процедура>] върху аргументи arg1, arg2, ... , argn, като при това тези аргументи не се оценяват още един път, и връща получения резултат.(apply + '(2 5)) ──> 7 (apply max '(2 7 8 9 5)) ──> 9(apply append '((1) (2) () (3))) ──> (1 2 3)

Общ вид и действие на процедура filter в езика Racket

Общ вид на примитивната процедура filter: (filter <предикат> <списък>) Действие. Като резултат се връща списък с елементите на <списък>, който удовлетворяват <предикат>

Общ вид и действие на процедура map в езика Racket

Общ вид на примитивната процедура map: (map <процедура> <списък>) Действие. Оценяват се <процедура> и <списък>, процедурата [<процедура>] се прилага едновременно (псевдопаралелно) към всеки от елементите на списъка [<списък>] (като при това не се оценяват още веднъж елементите на []) и като оценка се връща списъкът от получените резултати

Общ вид и действие на процедура begin в езика Racket

Общ вид на специална форма begin: (begin <израз1> <израз2> ... <изразN>) Действие (семантика). Оценяват се последователно (от ляво на дясно) изразите <изразi>. Оценката на обръщението към begin съвпада с [<изразN>].

Общ вид на условен израз if в езика Haskell

Общ вид на условен израз if в Haskell: if condition then m else

Специална форма cond. Общ вид. определение "клаузи"

Общ вид: (cond [<тест1> <последователност-от-изрази1> ] [<тест2> <последователност-от-изрази2> ] . . . [<тестN> <последователност-от-изразиN> ]) Забележка. Аргументите [ <тестi> <последователност-от-изразиi>] се наричат клаузи Често последната клауза използва думата "else"

Специална форма if в езика Racket. Общ вид

Общ вид: (if <тест> <then-израз> <else-израз>)

Обясни понятието "опашкова рекурсия"

Опашковата рекурсия (tail recursion) е линейна рекурсия, при която общата задача се трансформира до нова, по-проста, като при това решението на общата задача съвпада с решението на по-простата.

Обяснете понятието "сечение на оператори" в езика Haskell. Дайте пример

Операторите (инфиксно прилаганите двуаргументи функции) в Haskell могат да бъдат прилагани частично, като за целта се задава това, което е известно, под формата на т. нар. сечения на оператори (operator sections). Примери. (2+) Функцията, която прибавя аргумента си към числото 2. (>2) Функцията, която проверява дали дадено число е по-голямо от 2. ("\n"++) Функцията, която поставя newline в началото на даден низ.

Дайте определение на понятието "полиморфна функция" в езика Haskell

Полиморфните функции действат върху аргументи от различни типове. Полиморфни са голяма част от функциите за работа със списъци.Пример: length :: [Bool] -> Int length :: [Int] -> Int length :: [[Char]] -> Int и т.н. Обобщеният запис, който капсулира (encapsulates) горните, е length :: [a] -> Int

Обяснете понятието "клас" в езика Haskell. Дайте пример

Понятието клас в езика Haskell се определя като колекция от типове, за които се поддържа множество додефинирани операции, наречени методи. Пример: class Eq a where (==) :: a -> a -> Bool

Дайте определение на понятието "поток" в езика Racket

Потокът е редица от елементи, която може да се дефинира с помощта на основните примитивни процедури за работа с потоци както следва: ако x има стойност, равна на оценката на (stream-cons a b), то (stream-first x) ──> [a] и (stream-rest x) ──> [b]

Какво представлява "оценяване на обръщение към процедура чрез заместване"

При оценяване на комбинация, чийто оператор е съставна процедура, интерпретаторът следва същия процес, както при оценяване на комбинация, чийто оператор е примитивна процедура: 1. Интерпретаторът оценява елементите на комбинацията 2. и прилага процедурата(която е стойност на оператора на комбинацията) към аргументите(които са стойности на операндите на комбинацията) При прилагане на съставна процедура към аргументите се оценява тялото на процедурата, като предварително формалните параметри се заместват със съответните фактически (със съответните аргументи) и след това се следва механизмът на оценяване на комбинация.

Обяснете понятието "обща рекурсия върху списъци" в езика Haskell и дайте пимер

При тези функции схемата на дефиниране е специфична и се подчинява на задачата да се даде отговор на въпроса: Когато се дефинира f (x:xs), кои стойности на f хs биха помогнали за коректното описание на резултата? !Примитивната рекурсия е частен случай на общата рекурсия. Пример:zip :: [a] -> [b] -> [(a,b)] zip (x:xs) (y:ys) = (x,y) : zip xs ys zip _ _ = [] Пример:take :: Int -> [a] -> [a] take 0 _ = [] take _ [] = [] take n (x:xs) | n>0 = x : take (n-1) xs take _ _ = error "take: negative argument

Дайте определение на понятието "типова променлива" в езика Haskell

Пример: length :: [a] -> Int Тук a е променлива на тип (типова променлива, type variable), т.е. променлива, която означава произволен тип Типовете от вида на [Bool] -> Int са екземпляри на типа [a] -> Int.

Обясни понятието "процедура от по-висок ред"

Процедури, които манипулират други процедури, се наричат процедури от по-висок ред. map и filter са примери за процедури о по-висок ред

Обясни понятието "рекурсивен изчислителен процес."

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

Обяснете понятието "сигнатура на клас" в езика Haskell. Дайте пример

Сигнатура на класа прeдставлява списък от имената и типовете на функциите, които еднозначно определят (характеризират) класа Пример: class Visible a where toString :: a -> String size :: a -> Int

Обясни понятието "S-израз" в Racket

Символните изрази (S-изрази) са обекти, които могат да бъдат произволни символи (а не само числа) или да се състоят от произволни символи.S-изразите в езика Lisp (в частност, в Racket) се дефинират както следва: 1) Атомите (числата, булевите константи #t и #f, символните низове и т. нар. символни атоми или символи) са S-изрази. Атомите все пак си остават примитивни типове данни 2) Ако s1 и s2 са S-изрази, то (s1 . s2) също е S-израз. 3) Няма други S-изрази освен тези, описани в т. 1) и 2).

Как се конструира списък чрез определяне на неговия обхват (List Comprehension) в езика Haskell

Синтаксис: [expr | q1, ... , qk] , където expr е израз, а qi може да бъде - генератор от вида p <- lExp, където p е образец и lExp е израз от списъчен тип - тест (филтър), bExp, който е булев израз При това в qi могат да участват променливите, използвани в q1, q2, ... , qi-1. Пример [isEven n | n <- ex] => [True,True,False] [2*n | n <- ex, isEven n, n>3] => [8]

Обяснете действието на специалната форма lambda в езика Racket. Дай 2 примера

Специалната форма lambda e способ за дефиниране на процедури без те да бъдат именувани. Общ вид на обръщението към специалната форма lambda: (lambda (<формални параметри>) <тяло>) Семантика. В резултат на оценяването на обръщението към lambda се получава процедура, която обаче не се свързва с никакво име в средата. Тази процедура става оценка на обръщението към lambda.

Дайте определение на понятието "списък" в Haskell

Списъкът в Haskell е редица от (променлив брой) елементи от определен тип. За всеки тип t в езика е дефиниран също и типът [t], който включва списъците с елементи от t. [ ]: празен списък (списък без елементи). Принадлежи на всеки списъчен тип. [e1,e2, ... , en]: списък с елементи е1, e2, ... , en.

Обясни понятието "списък" в езика Racket

Списъците в Racket са точкови двойки, които представят крайни редици от елементи. 1 ) празният списък е списък 2 ) (h . t) е списък ако t e списък

Стойност(оценката) на комбинация

Стойността (оценката) на комбинацията се получава чрез прилагане на процедурата, зададена чрез оператора, към аргументите, които са стойности на операндите (+ 2 4 8 7 6) (+ (* 3 5) (- 10 6)) (* (+ 2 (* 2 4)) (+ 3 5 7))

Типове изрази в Racket

Съществуват два типа изрази в Racket: - примитивни изрази са атомите в езика. - съставните изрази = комбинации = обръщения към функции.

Същност на "модел на оценяване"

Същността на този модел на оценяване на комбинациите и в частност на обръщенията към съставни процедури е следната: - при оценяване на комбинация най-напред се оценяват подизразите на тази комбинация, след което оценката на първия подизраз се прилага върху оценките на останалите подизрази (т.е. прилага се общото правило за оценяване на комбинации); - прилагането на дадена съставна процедура към получените аргументи се извършва, като съгласно горното правило за оценяване на комбинации се оценят последователно изразите от тялото на процедурата, в които формалните параметри са заместени със съответните аргументи (фактически параметри). Оценката на последния израз от тялото става оценка на обръщението към съставната процедура.

Специална форма(дефиниция,пример)

Това са вградени оператори, които са изключения от общото правило за оценяване на комбинации. Примери: lambda, define, if, cond

Дайте определение на понятието "условия/guards" в езика Haskell

Условието („охраняващ" израз, guard) е Булев израз. Аналог на cond в Racket. Общ вид: name x1 ... xn | guard1 = expression1 | guard1 = expression1 | guard1 = expression1

Типове функции в Racket

Функциите в езика са - вградени (наричат се още примитивни процедури) - дефинирани (наричат се още съставни процедури, тъй като представляват комбинации на други процедури).

Обяснете понятието "функция от по-висок ред" в езика Haskell и дайте пимер

Функция от по-висок ред се нарича всяка функция, която получава поне една функция като параметър (аргумент) или връща функция като резултат Примери: map,filter,foldr,foldl,zip

Обяснете понятието "взаимно рекурсивен тип" в езика Haskell. Дай пример

Често е полезно при описанието на един тип да бъдат използвани други типове. Някои от тези типове от своя страна биха могли да цитират първия. В такива случаи се говори за взаимно рекурсивни типове. Примерни дефиниции: data Person = Adult Name Address Biog | Child Name data Biog = Parent String [Person] | NonParent String

Обяснете понятието "рекурсивен алгебричен тип" в езика Haskell. Дай пример

Често характерът на решаваните задачи е такъв, че е естествено някои от алгебричните типове, които потребителят дефинира, да се описват в термините на самите себе си. Такива алгебрични типове се наричат рекурсивни. Например понятието „израз" може да се дефинира или като литерал - цяло число, или като комбинация на два израза, в която се използва аритметичен оператор като + или -. Примерна дефиниция на Haskell: data Expr = Lit Int | Add Expr Expr | Sub Expr Expr data NTree = NilT | Node Int NTree NTree Node 10 NilT NilT Node 17 (Node 14 NilT NilT) (Node 20 NilT NilT) Дефиниции на някои функции за работа с двоични дървета sumTree,depth :: NTree -> Int sumTree NilT = 0 sumTree (Node n t1 t2) = n + sumTree t1 + sumTree t2 depth NilT = 0 depth (Node n t1 t2) = 1 + max (depth t1) (depth t2)

Комбинация(обръщение към функция/процедура)(дефиниция)

израз, конструиран като списък от изрази, заградени в скоби. Най левият елемент на списъка се нарича оператор, а останалите - операнди.

Израз(дефиниция)

или атом (атомарна константа или променлива), или обръщение към функция, което има следния вид: ( <означение на функция> <арг1> <арг2> ... <аргн> ) \___оператор__/ \__операнди_____/

Обясни понятието "линейно итеративен процес"

линейно итеративен процес е итеративен процес, при който броят на стъпките расте линейно с нарастването на аргумента n (т.е. е линейна функция на n)

Обясни понятието "линейно рекурсивен процес"

линейно рекурсивен процес - е рекурсивен процес чиято дължина на генерираната верига расте линейно с нарастването на аргумента n (т.е. е линейна функция на n)


संबंधित स्टडी सेट्स

Chapter 2: The Contingency Perspective

View Set

ExamFX Life and Health Life Insurance - Basics

View Set

Mastering Math Facts Multiplication Set M (3x5, 5x3, 8x8)

View Set