Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение подмножеств множества. 
V
    Опции темы
wwall
Дата 19.10.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



Построение подмножеств множества.
Можно ли улучшить?

(defun oneIntersect (x y)
    (cond 
        ((null x) nil)
        ((null y) nil)
        ((equal x y) nil)
        ('t (list x y))
    )
)

(defun listIntersect (x y)
    (if (null y) nil (cons (oneIntersect x (car y)) (listIntersect x (cdr y))))
)

(defun intersect (x y)
    (if (null x) nil (cons (listIntersect (car x) y) (intersect (cdr x) y)))    
)


(setq xx (list 1 2 3 4 5))

(setq yy (remove-if #'null (apply #'append (intersect xx xx))))


PM MAIL   Вверх
svg
Дата 22.10.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2005

Репутация: 14
Всего: 18



Цитата(wwall @  19.10.2006,  09:23 Найти цитируемый пост)
Построение подмножеств множества.


Код

(defun subsets (set)
  (case (length set)
    ((0 1) (list set))
    (otherwise (let ((ss (subsets (cdr set))))
                 (cons
                  (list (car set))
                  (append
                   (mapcar
                    #'(lambda (ss)
                        (cons (car set) ss))
                    ss)
                   ss))))))


CL-USER> (subsets '(1 2 3 4))
((1) (1 2) (1 2 3) (1 2 3 4) (1 2 4) (1 3) (1 3 4) (1 4) (2) (2 3) (2 3 4)
 (2 4) (3) (3 4) (4))
PM MAIL   Вверх
_sg
Дата 24.4.2014, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 16.5.2007

Репутация: 2
Всего: 2



как вариант:
Код

(defun sets (w)
  (if w ((lambda (r)
           (nconc r (mapcar #'(lambda (a) (cons (car w) a)) r)))
         (sets (cdr w)))
      '(nil)))

> (sets '(a b c))
(NIL (C) (B) (B C) (A) (A C) (A B) (A B C))

--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.