• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Надо построчно объяснить какие действия происходят

  • Автор темы Автор темы ksu9304
  • Дата начала Дата начала

ksu9304

Ученик
Регистрация
4 Июн 2011
Сообщения
4
Реакции
0
Баллы
0
Надо построчно объяснить какие действия происходят

(defun work-word (word)
(defun word-cycle (rest-word prev count)
(if (null rest-word)
(if (= count 0)
'()
(cons (+ 1 count) '()))
(if (eq (car rest-word) prev)
(word-cycle (cdr rest-word)
prev
(+ count 1))
(if (= 0 count)
(cons (car rest-word)
(word-cycle (cdr rest-word)
(car rest-word)
0))
(cons (+ 1 count)
(cons (car rest-word)
(word-cycle (cdr rest-word)
(car rest-word)
0)))))))
(word-cycle word '() 0))

(defun work-proc (text)
(mapcar '(lambda (sentence)
(mapcar '(lambda (word)
(pack (work-word (unpack word))))
sentence))
text))

(prin1 (work-proc '((aaabb ccccddd) (eeefggg hhkl))))
 
(объявить функцию work-word (с аргументом word) тело функции:
(объявить функцию word-cycle (с аргументом rest-word prev count) тело функции:
если аргумент rest-word пустой ( то если count=0 вернуть пустой список если не равно нулю, то увеличить count на 1 и объединить с пустым списком )
если аргумент rest-word не пустой то
если (первый элемент - атом) списка rest-word равен prev то
рекурсивно вызываем исполняемую функцию word-cycle с аргументами (список rest-word кроме первого элемента - хвост) prev и count увеличиный на единицу
если (первый элемент - голова) списка rest-word не равен prev то
если count=0 то
объединить (первый элемент - голова) списка rest-word и то, что вернет функция word-cycle с аргументами (список rest-word кроме первого элемента - хвост)
(первый элемент - атом) списка rest-word и 0
иначе если count не равно 0 то
объединить count+1 с объединением((первый элемент - атом) списка rest-word и функция word-cycle с параметрами хвост списка rest-word голова списка rest-word и 0)

вызвать функцию word-cycle с параметром word пустым списком и 0

определить функцию work-proc с параметром text
дальше не уверен,что правильно
вызвать для каждого аргумента text анонимную функцию(lambda) функцию
с параметром sentence тело функции: для каждого элемента sentence вызвать анонимную функцию с параметром word которая я так понял что упаковать то, что вернет функция work-word с параметром распаковать word

напечатать, что ввернет функция work-proc с параметром - список '((aaabb ccccddd) (eeefggg hhkl))
 
а для чего объединять с нулем?
 
Назад
Сверху