Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы 
:(
    Опции темы
Straik
Дата 12.12.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть функция, которая выводит список всех перестановок списка.
Нужно её переделать, чтобы исходные данные были массивом, а не списком.
Поможете? А то с массивами беда


(defun addel (el l)
    (cond
        (
            (car l)
            (append
                (list (cons el (car l)))
                (addel el (cdr l))
            )
        )
        (T NIL)
    )
)

(defun first_to_end (l lst)
    (cond
        (
            (not (equal (car l) (car lst)))
            (append (cdr l) (list (car l)))
        )
        (T NIL)
    )
)

(defun perest (l lst)
    (cond
        (
            (equal l NIL)
            NIL
        )
        (
            (cdr l)
            (append
                (addel
                    (car l)
                    (perest (cdr l) (last (cdr l)))
                )
                (perest
                    (first_to_end l lst)
                    lst
                )
            )
        )
        (T (list l))
    )
)

(defun per (l) (perest l (last l)))

PM MAIL   Вверх
_sg
Дата 24.4.2014, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вариант для списков:
Код

(defun permutate (w)
  (cond ((null w) nil)
        ((null (cdr w)) (list w))
        ((loop for a in w
               nconc (mapcar #'(lambda (e) (cons a e))
                             (permutate (remove a w)))))))

> (permutate '(1 2 3))
((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1))


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

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

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


 




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


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

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