Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Даны списки lst1 и lst2. Реализовать рекурсивную функцию
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
alxxx
Guest
 
Сообщений: n/a
По умолчанию Даны списки lst1 и lst2. Реализовать рекурсивную функцию - 08.03.2007, 00:39

Помогите, пожалуйста. Задача:
"Даны списки lst1 и lst2. Реализовать рекурсивную функцию, которая удаляет из lst1 все элементы-списки, соответствующие тому же множеству, что и lst2. Пример: lst1 ='(1 (2 3) 5 (2 3 3 2) 4 (2 2 3) 6) , lst2 = '(3 2 3 2) результат: '(1 5 4 6) "

Никак не могу понять, как это сделать. С простейшей рекурсией типа найти сумму эл-тов списка или реверсировать список понятно, а тут не знаю как.
Ответить с цитированием
  (#2 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 523
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 08.03.2007, 17:36

Код:
(defun clear-sub (w v)
  (when w (if (or (atom (car w)) (set-difference (car w) v))
              (cons (car w) (clear-sub (cdr w) v))
              (clear-sub (cdr w) v))))
Код:
(defun dump-sub (w v)
  (when w ((lambda (a d)
             (if (or (atom a) (set-difference a v))
                 (cons a (dump-sub d v))
                 (dump-sub d v)))
           (car w) (cdr w))))
(dump-sub '((2 3 2 3) 8 (2 3) (2 7) (2) (2 2 3) 5 ) '(3 2 3 2))
(8 (2 7) 5)
Ответить с цитированием
  (#3 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 523
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 25.03.2007, 18:39

Код:
(defun drop-sub (w v) 
  (remove-if #'(lambda (s)
                 (when (listp s)
                   (subsetp s v)))
             w))
(drop-sub '((2 3 2 3) 8 (2 3) (2 7) (2) (2 2 3) 5 ) '(3 2 3 2))
(8 (2 7) 5)
Ответить с цитированием
  (#4 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 523
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 26.03.2007, 20:13

Код:
(defun drop-set (w v) 
  (delete-if #'(lambda (s)
                 (and (listp s) (subsetp s v)))
             w))
(drop-set '((2 3 2 3) 8 (2 3) (2 7) (2) (2 2 3) 5 ) '(3 2 3 2))
(8 (2 7) 5)
Ответить с цитированием
  (#5 (permalink)) Старый
K@trin K@trin вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.11.2006
По умолчанию 03.04.2007, 03:33

а как переделать решение задачи, чтобы использовалась только форма LET ?

подскажите, кто знает
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 523
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 09.04.2007, 00:09

Код:
(defun dump-sub (w v)
  (when w (let ((a (car w)) (d (cdr w)))
            (if (or (atom a) (nset-difference a v))
                (cons a (dump-sub d v))
                (dump-sub d v)))))
(dump-sub '((2 3 2 3) 8 (2 3) (2 7) (2) (2 2 3) 5 ) '(3 2 3 2))
(8 (2 7) 5)
Ответить с цитированием
  (#7 (permalink)) Старый
Sevelin Sevelin вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.07.2016
По умолчанию 24.07.2016, 20:06

Ой, а подскажите пожалуйста, у меня точно такое же задание, как его сделать итерационно (циклы и прочее)??
Ответить с цитированием
  (#8 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 523
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 30.07.2016, 14:57

lisp Код:
(defun dump-sub (w v)
  (loop for a in w
        when (or (atom a) (nset-difference a v))
        collect a))
 
> (dump-sub '((2 3 2 3) 8 (2 3) (2 7) (2) (2 2 3) 5 ) '(3 2 3 2))
(8 (2 7) 5)


vk.com/ansicommonlisp
Ответить с цитированием
  (#9 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 523
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 30.07.2016, 14:58

lisp Код:
(defun dump-sub (w v)
  (remove-if-not
   #'(lambda (a) (or (atom a) (nset-difference a v)))
   w))
 
> (dump-sub '((2 3 2 3) 8 (2 3) (2 7) (2) (2 2 3) 5 ) '(3 2 3 2))
(8 (2 7) 5)


vk.com/ansicommonlisp
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напишите функцию для lst1 и lst2, где lst1-список символьных атомов lulu Lisp 5 23.12.2011 21:01
Реализовать функцию, которая удаляет из lst1 все элементы-списки Loona Lisp 5 22.03.2011 15:55
Написать программу, возвращающую Т, если lst2 является под-списком lst1 neud Lisp 3 24.01.2011 19:55
Как написать рекурсивную функцию Аннушка Visual Basic 0 29.12.2010 19:18
Определите рекурсивную функцию MBR Pavel123 Lisp 0 20.12.2010 17:58
Как написать рекурсивную функцию Tani91 Lisp 2 10.03.2010 00:51
Требуется написать рекурсивную функцию toxa161 Lisp 6 29.07.2009 00:27
Определить рекурсивную функцию EAPPROX Student2 Lisp 7 26.02.2007 17:46
Определить рекурсивную функцию COPY imported_Zic Lisp 18 11.02.2007 11:19
Определить рекурсивную функцию COUNTG andrey-m Lisp 1 27.12.2006 17:58
Даны списки L1 и L2 элементов типа char. Построить список L3 Geront Lisp 1 31.10.2006 00:50
Определить рекурсивную функцию Alexeika Lisp 1 21.11.2004 23:18



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов