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

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

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

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

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

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

Добрый день!
Есть такое задание: необходимо из списка (a b c d e f g h i j k l m n) рекурсивно получить список (a c e f g h i j k l m n), т.е. убрать из него два первых четных элемента

(setq x '(a b c d e f g h i j k l m n) )
(defun f (l)
(cond
((null (cdr l)) nil)
(t (cons (car l) (f (cddr l))) )

)
)

(princ x)
(terpri)
(princ (f x))

преобразует список к виду (a c e g i k m)
подскажите один из вариантов как выйти из рекурсии после двух рекурсивных вызовов
s2dentishe вне форума Ответить с цитированием
Старый 07.03.2011, 20:48   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Можно, например, добавить опциональную переменную, которая будет хранить кол-во исключённых символов, и когда она будет равна 2, прекращать вызов. Или же определить вложенную функцию, с использованием labels, которая будет принимать помимо списка ещё и счётчик.
Код:
(defun exclude-2 (a-list &optional (count 0))
  (cond
    ((null (cdr a-list)) nil)
    ((>= count 2)        a-list)
    (t (cons (car a-list) (exclude-2 (cddr a-list) (1+ count))))))
Код:
(defun exclude-2 (a-list)
  (labels ((exclude-wc (a-list count)
             (cond
               ((null (cdr a-list)) nil)
               ((>= count 2)        a-list)
               (t (cons (car a-list) (exclude-wc (cddr a-list) (1+ count)))))))
    (exclude-wc a-list 0)))
netrino вне форума Ответить с цитированием
Старый 07.03.2011, 21:27   #3
s2dentishe
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 70
По умолчанию

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


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсия dimok5 Помощь студентам 1 16.11.2010 18:37
рекурсия DinaraIITU Помощь студентам 3 04.11.2010 15:39
Рекурсия LegionuS Паскаль, Turbo Pascal, PascalABC.NET 4 29.09.2010 15:31
рекурсия Lena neznayka Помощь студентам 2 16.06.2010 20:46
рекурсия -Spirit- Помощь студентам 1 14.01.2010 16:40