Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
II вопрос.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
115.2 Кб
Скачать
  1. На Лиспе решить задачу проверки двух списков на множественное равенство.

Определение: Равенство двух списков-множеств L и R это

  • если L пусто, то результат есть результат проверки на пустоту R;

  • если голова L входит в R, то результат есть результат проверки на равенство хвоста L и списка R, из которого исключена голова L;

  • в остальных случаях множества не равны.

*Понадобится дополнительная функция «элемент E входит в список L» (см. выше) и функция удаления элемента E из списка L:

(defun my_remove (E L)

(cond

((null L) nil)

((= E (car L)) (my_remove E (cdr L)))

(T (cons (car L) (my_remove E (cdr L))))

)

)

(defun EQ_SET (L R)

(cond

((null L) (NULL r))

((MY_MEMBER (car L) R) (EQ_SET (cdr L) (MY_REMOVE (CAR L) R)))

(T NIL)

)

)

  1. На Лиспе решить задачу проверки, является ли одно множество подмножеством другого.

Определение: Проверка, является ли список-множество L подмножеством списка-множества R:

  • если L пусто, то результат – является (истина);

  • если голова L входит в R, то результат есть результат проверки, является ли хвост L подмножеством R;

  • в остальных случаях L не является подмножеством R (ложно).

*Понадобится дополнительная функция «элемент E входит в список L» (см. выше).

(defun subSET (L R)

(cond

((null L) t)

((MY_MEMBER (car L) R) (subSET (cdr L) R))

(T NIL)

)

)

  1. На Лиспе реализовать функцию нахождения нод двух натуральных чисел.

Определение: Наибольший общий делитель (НОД) двух натуральных чисел А и В это

  • если В = 0, то результат А;

  • иначе результат – НОД В и остатка от деления А на В.

*Понадобится дополнительная функция «получение остатка от деления А на В»:

(DEFUN MOD(A B)

(COND

((< A B) A)

(T (MOD (- A B) B))

)

)

(DEFUN NOD(A B)

(COND

((= B 0) A)

(T (NOD B (MOD A B)))

)

)

  1. На Лиспе реализовать функцию нахождения суммы элементов списка.

Определение: СУММА элементов списка - это

  • 0, если список пустой;

  • голова списка, добавленная к сумме элементов хвоста списка в противном случае.

(defun mysum (L)

(cond

((null L) 0)

(T (+ (car l) (mysum (cdr l))))

)

)

  1. На Лиспе реализовать функцию нахождения максимального элемента списка.

Определение:

  • если список пуст – вернуть nil;

  • если список состоит из одного элемента, максимальный элемент - голова списка;

  • в остальных случаях - максимальное значение из головы списка и максимального элемента хвоста.

*Есть встроенная функция max, но можно написать и свою.

(defun mymax (l)

(cond

((null l) nil)

((null (cdr l)) (car l))

(T (max (car l) (mymax (cdr l))))

)

)