Зворотний зв'язок

Засоби та принципи програмування на Ліспі

Наведену функцію можна визначити наступним чином (ім’я змінено на MAKE-LST):

(DEFUN MAKE-LST (N OBJ LST)

((AND (INTEGERP N) (PLUSP N))

(CONS OBJ (MAKE-LIST (SUB1 N) OBJ LST)) )

LST )

Функця (OBLIST) що не має аргументів, утворює та повертає список активних на поточний момент символів у системі. Символи розташовані в тому порядку, в якому вони прочитані або згенеровані строковими функціями: нові символі розташовані зліва від старих.

4. Породження комбінаторних об’єктів.

Розглянемо задачі, в яких необхідно отримати всі елементи деякої множини.

1. Надрукувати всі послідовності довжини n з цифр 0,1. (P11 n).

Функція P11 викликається з одним аргументом n, аргумент lst – допоміжний.

(DEFUN p11 (n lst)(DEFUN p13 (n lst)

((ZEROP n) (PRIN1 lst) (TERPRI))((ZEROP n) (PRN13 lst) (TERPRI))

(P11 (- n 1) (CONS 0 lst))(P13 (- n 1) (CONS 0 lst))

(P11 (- n 1) (CONS 1 lst)) )(P13 (- n 1) (CONS 1 lst)) )

2. Надрукувати всі послідовності довжини k з чисел 1..n. (P12 k n).

Друкуватимемо послідовності у лексикографічному порядку. За допомогою функції (GEN1 n) згенеруємо список з n елементів, кожен з яких дорівнює 1. Список lst зберігатиме поточну перестановку. Функція (NEXT lst n) знаходить перестановку, яка буде наступною після lst. Функція P12BEST є найкращим рекурсивним розв’язком цієї задачі.

(DEFUN GEN1 n)

((ZEROP n) NIL)

(CONS 1 (GEN1 (- n 1))) )

(DEFUN NEXT (lst n)

((< (CAR lst) n) (CONS (+ (CAR lst) 1) (CDR lst)))

((NULL (CDR lst)) NIL)

(CONS 1 (NEXT (CDR lst) n))

Шукана функція має вигляд:


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат