Засоби та принципи програмування на Ліспі
(DEFUN P12 k n)
(SETQ lst (GEN1 k))
(LOOP
((< (LENGTH lst) k))
(PRIN1 lst) (TERPRI)
(SETQ lst (NEXT lst n))
) )
(DEFUN P12BEST (n k lst c)
((ZEROP n) (PRIN1 lst) (TERPRI))
(PUSH 1 c)
(LOOP
((> (CAR c) k))
(P12BEST (- n 1) k (CONS (CAR c) lst) c)
(SETQ c (CONS (+ 1 (CAR c)) (CDR c)))
) (POP c) )
3. Надрукувати всі підмножини множини {1..n}. (P13 n).Оскільки всі підмножини будь-якої множини {1..n} перебувають у взаємно однозначній відповідності зі всіма послідовностями з 0 та 1 довжини n, то ця задача зводиться до задачі 1.1. Функція (P13 n) наведена в 1.1. Тільки замість виведення списку з 0 та 1 необхідно виводити номери всіх елементів списку, які дорівнюють 1. Функція (PRN13 lst) виводить необхідні номери елементів.
(DEFUN PRN13 (lst)
(SETQ i 0)
(LOOP
((NULL lst))
(INCQ i)
(IF (= 1 (POP lst)) (PROGN (PRIN1 i) (SPACES 1)))
) )
4. З перестановки (1 2 3 ... n ) необхідно отримати перестановку (n ... 2 1) за найменшу кількість кроків. Кроком будемо називати обмін місцями довільних двох сусідніх чисел. Наприклад, з перестановки (1 3 4 2) можна отримати одну з наступних: (3 1 4 2), (1 4 3 2), (1 3 2 4).