Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Haskell] Операции над строками (тип данных) 
:(
    Опции темы
Dimys1
Дата 18.4.2014, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.4.2014

Репутация: нет
Всего: нет



Определим следующий набор операций над строками:
  • Очистка: удаление всех символов из строки
  • Удаление: удаление всех вхождений указанного символа
  • Замена: замена всех вхождений одного символа на другой
  • Добавление: добавление в начало строки указанного символа

Разработайте тип данных, характеризующий операции над строками. Определите следующие функции:
1) process, получающая в качестве аргумента действие и строку и возвращающая строку, модифицированную в соответствие с указанным действием.
2) processAll, аналогичная предыдущей, но получающая список действий и выполняющая их по порядку.
3) deleteAll, принимающая две строки и удаляющей из второй строки все символы первой. При реализации обязательно использовать функцию processAll.
PM MAIL   Вверх
Gluttton
Дата 19.4.2014, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Код:
Код

-- ======================================================= --
-- Definition of set of operations with strings.
-- ======================================================= --
-- ------------------------------------------------------- --
-- Cleaning string.
cleaning :: String -> String
cleaning _ = []
-- ------------------------------------------------------- --


-- ------------------------------------------------------- --
-- Removing all symbols 'c' from string.
removing :: Char -> String -> String
removing _ [] = []
removing c (x:xs)
    | x == c = removing c xs
    | otherwise = x:removing c xs
-- ------------------------------------------------------- --


-- ------------------------------------------------------- --
-- Replacing all symbols 'cs' to symbol 'cd' in string.
replacing :: Char -> Char -> String -> String
replacing _  _ [] = []
replacing cs cd (x:xs)
    | x == cs = cd : replacing cs cd xs
    | otherwise = x : replacing cs cd xs
-- ------------------------------------------------------- --


-- ------------------------------------------------------- --
-- Append symbol 'c' to start of string.
adding :: Char -> String -> String
adding c s = c : s
-- ------------------------------------------------------- --


-- ======================================================= --
-- Declaration of type which describe string modification.
-- ======================================================= --
-- ------------------------------------------------------- --
-- Type of function which modify string.
type StringModifier = String -> String
-- ------------------------------------------------------- --


-- ======================================================= --
-- Definition of string modificators.
-- ======================================================= --
-- ------------------------------------------------------- --
-- Modification of string 's' by modifier.
process :: StringModifier -> String -> String
process func s = func (s)
-- ------------------------------------------------------- --


-- ------------------------------------------------------- --
-- Modificaton of string 's' by list of modifiers.
processAll :: [StringModifier] -> String -> String
processAll [] s = s
processAll (f:fs) s = processAll fs (f (s) )
-- ------------------------------------------------------- --


-- ------------------------------------------------------- --
-- Removing from string 'b' all symbols from string 'a'.
deleteAll :: String -> String -> String
deleteAll [] b = b
deleteAll a [] = []
deleteAll a b  = processAll removingList b
    where removingList = foldl (\acc m -> (removing (m) ):acc) [] a
-- ------------------------------------------------------- --



-- ======================================================= --
-- Main function.
-- ======================================================= --
-- ------------------------------------------------------- --
main = do {
    putStrLn (                  inputString);
    putStrLn (cleaning          inputString);
    putStrLn (removing  'S'     inputString);
    putStrLn (replacing 'S' 'X' inputString);
    putStrLn (adding    'A'     inputString);
    putStrLn (process cleaning  inputString);
    putStrLn (processAll [
                    removing 's',
                    removing 'S',
                    removing 'r',
                    replacing '_' ' ',
                    removing ' '
                    ]           inputString);
    putStrLn (deleteAll "aoei"  "boenairoes");
}   where inputString = "Input stRiNgg__ _ witH STrrange Sym123ol345..!"
-- ------------------------------------------------------- --


Вывод программы:
Цитата

Input stRiNgg__ _ witH STrrange Sym123ol345..!

Input stRiNgg__ _ witH Trrange ym123ol345..!
Input stRiNgg__ _ witH XTrrange Xym123ol345..!
AInput stRiNgg__ _ witH STrrange Sym123ol345..!

InputtRiNggwitHTangeym123ol345..!
bnrs


Не уверен, что правильно, поэтом повнимательнее пожалуйста...


--------------------
Слава Україні!
PM MAIL   Вверх
Compositum
Дата 11.12.2014, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Dimys1, задавая вопрос, выкладывай в т.ч. и свой вариант попытки решения с обозначением конкретных проблем, с которыми ты столкнулся в ходе написания кода. В противном случае это выглядит как "а напишите ка мне такое...". Обозначенные в теме вопросы демонстрируют нулевое знание Haskell, а отсутствие своего варианта решения - нежелание этим заниматься.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1191 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.