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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 12:19   #1
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию Как разорвать циклическую структуру? Лисп

есть список ((((1) 2) 3) 4)

(setq x '((((1) 2) 3) 4)) ;заносим в список
(rplacd (cdr x) x) ; зацикливаем структуру

получаем (((1) 2) 3) 4 (((1) 2) 3) 4 (((1) 2) 3) 4 ...

как теперь разорвать цикл, чтобы список начинался с 4-ки и заканчивался 3-кой ?
s2dentishe вне форума Ответить с цитированием
Старый 20.02.2011, 14:31   #2
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

пришло в голову вот такое решение в три действия, проверь его, подходит или нет:

Код:
(rplacd (cdr x) (car x))

(rplaca x (car (cdr x)))

(rplacd x (cdr (cdr x))
tools вне форума Ответить с цитированием
Старый 20.02.2011, 14:51   #3
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию

в таком случае появляются дополнительные списковые ячейки (см. ссылку http://programmersforum.ru/showthread.php?t=138961, там полное задание моей задачи)
s2dentishe вне форума Ответить с цитированием
Старый 20.02.2011, 15:08   #4
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Если бы мы использовали функции наподобие cons или list, тогда создавались бы новые списочные структуры , а спискоразрушающие функции rplacd и rplaca только изменяют существующую списочную структуру, а не создают новую. Поэтому никаких дополнительных списочных ячеек тут не появляется. Мы же только указателями здесь оперируем.

Последний раз редактировалось tools; 20.02.2011 в 15:16.
tools вне форума Ответить с цитированием
Старый 20.02.2011, 15:16   #5
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию

спасибо большое! помогло !
s2dentishe вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как "обойти" циклическую ссылку ? 0mega Microsoft Office Excel 2 24.04.2010 22:20
Как разорвать связи? valerij Microsoft Office Excel 5 18.05.2009 23:36
idhttp, как разорвать соединение ??? Игорь22 Работа с сетью в Delphi 2 07.06.2008 04:17
как програмно разорвать соединение с интернетом shurik_7866 Работа с сетью в Delphi 4 24.01.2008 13:06
как разорвать соединение с интернетом shurik_7866 Работа с сетью в Delphi 0 22.01.2008 20:32