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

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

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

Восстановить пароль
Повторная активизация e-mail

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

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

Добрый день! Есть такая задача
Дан список (a b c d). Необходимо преобразовать его в список (a (b) c (d)) используя рекурсию.
Делаю так
(defun mf1 (l)
(cond
((null l) nil)
(t (cons (cons (car l) (list (cadr l))) (mf1 (cddr l)) ) )
)
)
вбиваем
-->(mf1 '(a b c d))

а выходит так
((a b) (c d))
и я не пойму почему?
s2dentishe вне форума Ответить с цитированием
Старый 22.02.2011, 18:21   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Не специалист по лиспу, но
Код:
(defun transform (a-list)
  (cond
    ((null (cdr a-list)) nil)
    (T (let ((next-cell (cdr a-list)))
	 (rplacd a-list (cons next-cell (cdr next-cell)))
	 (rplacd next-cell nil)
	 (transform (cddr a-list))))))
netrino вне форума Ответить с цитированием
Старый 22.02.2011, 18:30   #3
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию

выводит на результат nil, список остается прежним
s2dentishe вне форума Ответить с цитированием
Старый 22.02.2011, 18:56   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Возвращает Nil, это да, но список меняется, я проверял.
Вы уверены, что список сохраняется между вызовами?
Код:
(let ((a-list '(1 2 3 4 5)))
  (transform a-list)
  (print a-list))

Последний раз редактировалось netrino; 22.02.2011 в 18:58.
netrino вне форума Ответить с цитированием
Старый 22.02.2011, 19:50   #5
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на структуроразрушающие функции. Лисп s2dentishe Помощь студентам 2 20.02.2011 12:02
Лисп (рекурсии и списки) Dmitro62 Помощь студентам 0 19.01.2011 20:11
Задача на ЛИСП Alexey123 Помощь студентам 2 24.12.2010 16:27
Лисп: Применение. Рейтинги. Levsha100 Свободное общение 2 26.04.2010 06:55
Лисп сопоставить leest Помощь студентам 9 09.03.2010 23:13