Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Помогите решить задачи


Автор: Лехич 4.12.2011, 19:36
Здравствуйте, очень нужна помощь в решении следующих задач:
1.    Для заданного списка получить множество всех возможных перестановок его элементов

2.    Алгебраическое выражение содержит четыре арифметические операции над переменными, разработать программу, упрощающую выражение записанное в инфиксной форме записи. Например, 0+a*(b+1*c)=a(b+c).

Заранее спасибо!

Автор: _sg 22.12.2012, 01:21
Код

(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 25.4.2014, 16:35
Код

(defun permutate (w)
  (when w (if (cdr w)
              (loop for a in w
                    nconc (mapcar #'(lambda (e) (cons a e))
                                  (permutate (remove a w))))
              (list w))))
 
> (permutate '(1 2 3))
((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)