Fppexamkn2

Второто контролно за функционални джадаи от Компютърни науки

Вариант Б

Първа задача (1,5т)

Да се напише функция на Scheme (paths-through n g), която намира всички ациклични пътища в граф g, които минават през възела n.

Решение :

Тук джедаите трябва да напишат решение.

Втора задача (1т)

Да се напише функция на Shcheme(или на Haskell), която по даден поток s от точкови двойки от вида (аi . bi), където ai и bi са неотрицателни цели числа, генерира нов поток, в който всяко ai се повтаря bi на брой пъти. Пример : Нека s е потокът (2 . 2), (0 . 1), (3 . 5), … Тогава (repeat-stream s) трябва да генерира потока 2, 2, 0, 3, 3, 3, 3, 3

Трета задача (1,5т)

Да се напишат функции на Haskell

Първа функция

startsWith :: (Eq a) => [a] -> [a] -> Bool

Която проверява дали първият списък е начало на втория
Решение :

Сравнително лесна задача :

startsWith :: (Eq a) => [a] -> [a] -> Bool
startsWith list1 list2 = list1 == (take (length list1) list2)

Втора функция

substAll :: (Eq a) => [a] -> [a] -> [a] -> [a]

Която заменя всяко срещане на втория списък като подсписък в първия с третия.

Трета функция

substDictionary :: (Eq a) => [a] -> [(a,a)] -> [a]

Която за всяка двойка (x,y) от втория списък ("речник") заменя всяко срещане на x като подсписък в първия списък с y.
Пример : substDictionary "I hate Scheme and Scheme hates me" [("hate", "love") , ("Scheme", "Haskell")] -> "I love Haskell and Haskell loves me"
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License