| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LISP > Архивация строки |
| Автор: Metalex 1.12.2012, 15:19 |
| Здравствуйте! Решаю задачки, но застрял на одной, подтолкните в правильном направлении, пожалуйста. Условие: Есть строка, в ней надо заменить подстроки, которые состоят из 4х и больше одинаковых символов (идущих подряд) на знак ! + количество подряд идущих одинаковых символов + сам символ. Например: aabbaaabbbcsdkAAAAbbbbb => aabbaaabbbcsdk!4A!5b Ничего лучше, чем просто в do или loop идти по строке и искать вхождения одинаковых символов в голову не приходит.. Также не понятно как заменить подстроку. Нашел http://emacswiki.org/emacs/ReplaceInString, но мой emacs 21 не знаком с функцией replace-regexp-in-string. Спасибо за любые советы. |
| Автор: _sg 2.12.2012, 11:18 | ||
|
| Автор: Metalex 2.12.2012, 13:40 |
| _sg, огромное спасибо! Не ожидал, что так запутано выйдет, буду разбираться! |
| Автор: Metalex 2.12.2012, 15:31 | ||
_sg, можете, пожалуйста, пояснить, что происходит здесь:
а также что означает #? Спасибо. EDIT: разобрался со всем кроме apply и # |
| Автор: _sg 2.12.2012, 16:50 | ||||
Функция apply применяет функцию к одному и более аргументу, последним из которых должен быть список:
#' - сокращенная запись function - вызов функции, т.е. #'f эквивалентно (function f), например:
подробнее (с примерами): www.lispworks.com/documentation/HyperSpec/Body/f_apply.htm www.lispworks.com/documentation/HyperSpec/Body/02_dhb.htm |
| Автор: k0rvin 3.12.2012, 12:45 | ||
Можно еще так:
|
| Автор: Catstail 8.2.2013, 10:29 | ||
Вот чисто императивное решение для HomeLisp:
|
| Автор: Catstail 8.2.2013, 11:08 | ||
Вот еще одно решение (тоже для HomeLisp):
|