Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2012, 12:17   #1
Kira_kira
Новичок
Джуниор
 
Регистрация: 27.12.2012
Сообщений: 1
По умолчанию Структуроразрушающие функции. Лисп

Нужно из списка х (a b c d e f) получить список у (((a b) c d) ((a b) c d)), используя всего одну дополнительную ячейку памяти.
Вот все что у меня получилось:
(setq x '(a b c d e f))
(setq y (cddddr x))
(rplacd (cddr x) nil)
(rplaca (cdr y) x)
(rplaca y x)
Kira_kira вне форума Ответить с цитированием
Старый 27.12.2012, 12:51   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
(setq x '(a b c d e f))
(setq y (cddddr x))
(rplacd (cddr x) nil)
(rplaca (cdr y) x)
(rplaca y x)
rplacd заменяет cdr. То есть, после первой замещающей команды c обратится в "ничто" - в том смысле, что до неё нельзя будет добраться ни из x (списка (a b)), ни из y (списка (e,f)).

В меру своих знаний Lisp, предлагаю такой вариант действий:
1) Заменить nil на конце списка на указатель на c в списке x.
2) Заменить саму f на указатель на a.
3) Заменить саму e на указатель на (бывшую) f.
4) Присвоить y (бывшую) e.
5) А вот теперь разорвать связи: присвоить указателю из b nil, присвоить указателю из d nil.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 проги на лисп Virus191288 Фриланс 5 12.04.2011 09:04
Рекурсия. Лисп s2dentishe Помощь студентам 4 22.02.2011 19:50
Задача на структуроразрушающие функции. Лисп s2dentishe Помощь студентам 2 20.02.2011 12:02
Задача на ЛИСП Alexey123 Помощь студентам 2 24.12.2010 16:27
Лисп сопоставить leest Помощь студентам 9 09.03.2010 23:13