> 1 <

Автор Сообщение

Newstory

Members


Статус

2 сообщений

Где: ---
Род занятий:
Возраст:

#1759   2010-04-01 03:00 GMT+3 часа(ов)      
Здраствуйте! Помогите решить задачу на Лиспе
Задание такое:
Дан текст,представленный списком списков: каждое предложение – список слов, весь текст – список предложений.
В каждом слове каждого предложения для повторяющихся литер произвести следующую замену: повторные вхождения литер удалить, к первому вхождению литеры приписать число вхождений литеры в слово.
Пример:
‘((aaabb ccccdddd)(eeefggg hhkl)) превращается в ‘((a3b2 c4d3)(e3fg3 h2kl))
Заранее спасибо

Михаил

Members


Статус

120 сообщений

Где: ---
Род занятий:
Возраст:

#1778   2010-04-01 22:53 GMT+3 часа(ов)      
Намудрил, потом переделаю:
(define (f2 rlst z)
(if (pair? rlst)
(let* ((lst (reverse rlst))
(y (car lst))
(x (cadr lst)))
(reverse
(if (and (number? y) (eq? x z))
(cons (+ y 1) (cdr lst))
(if (eq? y z)
(cons 2 lst)
(cons z lst)))))
(let ((x rlst) (y z))
(if (eq? x y)
(list x 2)
(list x y)))))
(define (f sym)
(let ((lst (string->list (symbol->string sym))))
(string->symbol
(list->string
(apply append
(map (lambda (x)
(if (number? x)
(string->list (number->string x))
(list x)))
(foldl (lambda (y x) (f2 x y)) (car lst) (cdr lst))))))))
(define (over-map f e)
(if (pair? e)
(map (lambda (x) (over-map f x)) e)
(f e)))
;> (over-map f '((aaabb ccccdddd)(eeefggg hhkl)))
;((a3b2 c4d4) (e3fg3 h2kl))

Newstory

Members


Статус

2 сообщений

Где: ---
Род занятий:
Возраст:

#1780   2010-04-01 23:35 GMT+3 часа(ов)      
Спасибо, что откликнулись! Буду разбираться)

Михаил

Members


Статус

120 сообщений

Где: ---
Род занятий:
Возраст:

#1784   2010-04-02 06:42 GMT+3 часа(ов)      
(define (list->symbol l) (string->symbol (list->string l)))
(define (symbol->list s) (string->list (symbol->string s)))
(define (number->list n) (string->list (number->string n)))
(define (count-copy l c)
(if (or (null? l) (not (eq? (car l) c)))
0
(+ 1 (count-copy (cdr l) c))))
(define (f sym) (list->symbol (f2 (symbol->list sym))))
(define (f2 l)
(if (null? l)
'()
(let ((n (count-copy l (car l))))
(cons (car l)
(if (> n 1)
(append (number->list n)
(f2 (list-tail l n)))
(f2 (cdr l)))))))
(define (over-map f e)
(if (pair? e)
(map (lambda (x) (over-map f x)) e)
(f e)))
Спрашивайте, если что-нибудь непонятно, не стесняйтесь.
> 1 <


Онлайн :

0 пользователь(ей), 47 гость(ей) :