Задачи за обработка на текст
Изисквания за завършване
Упражнението цели да се изработи набор от фукции за
манипулиране на текст. Задачата е взаимствана от книгата "Hasell - The
Craft of Functional Programming. Second edition" на Simon Thompson.
Нека незначещи символи
да наричаме символите, разделящи думите в даден текст. В началото можем
да приемем, че такива са символите ' ' (интервал) и '\n' (нов ред). Да
се дефинираме списък whiteSpaces = [' ','\n'],
който в последствие можем да допълваме. За целта на упражнението ще
приемем, че всички пунктонационни знаци (',', '.', '!', ...) са
изписани непосредствено след някоя дума, т.е. не са отделени с
интервали от предходната дума.
Задача. Да се дефинира функция getWord s, която по даден символен низ намира първата дума в този низ. Ако низа е празен или започва с незначещ символ, то getWord да връща празния низ.
Задача. Да се дефинира функция dropWord s, която по зададен символен низ "премахва" първата дума в този низ, т.е. намира низа, получен от s чрез премахване на първата дума. Ако низа е празен или започва с незначещ символ, getWord го връща неизменен.
Задача. Да се дефинира функция dropSpaces s, която "премахва" всички незначещи символи в началото на низа s, ако има такива.
Задача. Да се напише функция splitWords, която по символен низ намира списъка от последователните думи в този низ.
Задача. Да се дефинира функция clearWord w, която по дадена дума w "премахва" пунктонационните знаци в нея (ако има такива).
Задача. Да се дефинира функция clearAll l, която премахва пунктонационните знаци от всички думи в списъка l.
Задача. Да се напише функция uniqueWords l, която "премахва" повторенията в списъка от думи l.
Задача. Да се дефинира функция memCount x l, която намира броя на срещанията на елемента x в списъка l.
Задача. Да се напише функция wordCounter u l. l е списъкт от думи, а u - списъкът от уникалните думни в l. Да се намри броя на срещанията в l на всяка уникална дума от него. Резултатът да представлява списък от двойки (дума,брой срещания).
Пример: wordCounter ["aaa", "bbb"] ["aaa", "bbb", "aaa"] = [("aaa",2), ("bbb",1)]
Задача. Да се дефинира функция splitLines words l, която "намества" думите последователно в редове, не по-дълги от l, т.е. разделя последователно списъка от думи words в списък от списъци от думи, като общата големина на думите в тези списъци е възможно най-голямото число, по-малко от l (към дължината на всяка дума да добавим 1 за интервала, който ще я отделя от останалите думи). Приемаме, че в списъка няма думи с повече от l символа.
Пример: splitLines ["hello", "world", "have", "a", "nice", "day"] 10 = [ ["hello", "world"], ["have", "a", "nice"], ["day"]]
Задача. Да се напише функция splitWords, която по символен низ намира списъка от последователните думи в този низ.
Задача. Да се дефинира функция clearWord w, която по дадена дума w "премахва" пунктонационните знаци в нея (ако има такива).
Задача. Да се дефинира функция clearAll l, която премахва пунктонационните знаци от всички думи в списъка l.
Задача. Да се напише функция uniqueWords l, която "премахва" повторенията в списъка от думи l.
Задача. Да се дефинира функция memCount x l, която намира броя на срещанията на елемента x в списъка l.
Задача. Да се напише функция wordCounter u l. l е списъкт от думи, а u - списъкът от уникалните думни в l. Да се намри броя на срещанията в l на всяка уникална дума от него. Резултатът да представлява списък от двойки (дума,брой срещания).
Пример: wordCounter ["aaa", "bbb"] ["aaa", "bbb", "aaa"] = [("aaa",2), ("bbb",1)]
Задача. Да се дефинира функция splitLines words l, която "намества" думите последователно в редове, не по-дълги от l, т.е. разделя последователно списъка от думи words в списък от списъци от думи, като общата големина на думите в тези списъци е възможно най-голямото число, по-малко от l (към дължината на всяка дума да добавим 1 за интервала, който ще я отделя от останалите думи). Приемаме, че в списъка няма думи с повече от l символа.
Пример: splitLines ["hello", "world", "have", "a", "nice", "day"] 10 = [ ["hello", "world"], ["have", "a", "nice"], ["day"]]
Задача. Да се дефинира функция alignLeft l,
която по списък от списъци от думи генерира низ с редове, получени чрез
конкатенация на думите в тези списъци, т.е. последователно, всеки ред
се образува от списък от думи, като ги залепяме една за друга с
интервал между тях.
Пример: alignLeft [ ["hello", "world"], ["have", "a", "nice"], ["day"] ] = "hello world\n have a nice\n day"
Задача. alignJustify l
Пример: alignLeft [ ["hello", "world"], ["have", "a", "nice"], ["day"] ] = "hello world\n have a nice\n day"
Задача. alignJustify l
Последно модифициране: събота, 12 ноември 2011, 17:38