- •II вопрос
- •Формулировку рекурсивного определения
- •Программную реализацию на языке lisp
- •На Лиспе решить задачу переворачивания данного списка.
- •На Лиспе решить задачу получения длины списка.
- •На Лиспе решить задачу получения начала непустого списка.
- •На Лиспе решить задачу нахождения пересечения двух списков-множеств.
- •На Лиспе решить задачу объединения двух списков-множеств.
- •На Лиспе решить задачу получения разности двух списков-множеств.
- •На Лиспе решить задачу проверки двух списков на множественное равенство.
- •На Лиспе решить задачу проверки, является ли одно множество подмножеством другого.
- •На Лиспе реализовать функцию нахождения нод двух натуральных чисел.
- •На Лиспе реализовать функцию нахождения суммы элементов списка.
- •На Лиспе реализовать функцию нахождения максимального элемента списка.
- •На Лиспе реализовать функцию подсчета количества вхождений данного элемента в список.
- •На Лиспе реализовать задачу проверки вхождения данного элемента в список.
- •На Лиспе реализовать функцию вычисления факториала.
- •На Лиспе реализовать функцию добавления элемента в упорядоченный список, не нарушая упорядоченности.
- •На Лиспе реализовать функцию сортировки списка.
- •На Лиспе реализовать функцию удаления всех элементов e из списка.
- •На Лиспе реализовать функцию нахождения последнего элемента непустого списка.
- •На Лиспе реализовать функцию нахождения n-го числа Фибоначчи
На Лиспе решить задачу получения длины списка.
Определение: ДЛИНА списка равна
0, если список пустой;
1 + длина хвоста списка в противном случае.
(DEFUN MY_LEN (L)
(COND
((NULL L) 0)
(T (+ 1 (MY_LEN (CDR L))))
)
)
На Лиспе решить задачу получения начала непустого списка.
Определение: НАЧАЛО непустого списка — это
пустой список, если список одноэлементен;
иначе — голова списка, добавленная к началу хвоста.
(DEFUN MY_BEGIN (L)
(COND
((NULL (CDR L)) ()) ; можно использовать NIL вместо ()
(T (CONS (CAR L) (MY_BEGIN (CDR L))))
)
)
На Лиспе решить задачу проверки списка на множество (список не содержит повторяющихся элементов).
Определение:
если список пуст, то он является множеством;
если голова списка входит в его хвост, то он не является множеством;
во всех остальных случаях список является множеством, если множеством является его хвост.
*Понадобится дополнительная функция «элемент E входит в список L»:
(defun my_member (E L)
(cond
((null L) nil)
((= E (car L)) T)
(T (my_member E (cdr l)))
)
)
(DEFUN IS_SET (L)
(COND
((NULL L) T)
((MY_MEMBER (CAR L) (CDR L)) NIL)
(T (IS_SET (CDR L)))
)
)
На Лиспе решить задачу нахождения пересечения двух списков-множеств.
Определение: Пересечение двух списков-множеств L и R это
если L пусто, то результат пустое множество;
если голова L входит в R, то результат есть множество, полученное добавлением головы L в пересечение хвоста L и списка R;
во всех остальных случаях результат есть пересечение хвоста L и списка R.
*Понадобится дополнительная функция «элемент E входит в список L» (см. выше).
(DEFUN INTERSEC (L R)
(COND
((NULL L) NIL)
((MY_MEMBER (CAR L) R) (CONS (CAR L) (INTERSEC (CDR L) R)))
(T (INTERSEC (CDR L) R))
)
)
На Лиспе решить задачу объединения двух списков-множеств.
Определение: Объединение двух списков-множеств L и R это
если L пусто, то результат R;
если голова L входит в R, то результат есть объединение хвоста L и списка R;
во всех остальных случаях результат есть множество, полученное добавлением головы L к объединению хвоста L и списка R.
*Понадобится дополнительная функция «элемент E входит в список L» (см. выше).
(DEFUN MY_UNION (L R)
(COND
((NULL L) R)
((MY_MEMBER (CAR L) R) (MY_UNION (CDR L) R))
(T (CONS (CAR L) (MY_UNION (CDR L) R)))
)
)
На Лиспе решить задачу получения разности двух списков-множеств.
Определение: Разность двух списков-множеств L и R (все элементы множества L, не принадлежащие множеству R) это
если L пусто, то результат пустое множество;
если голова L входит в R, то результат есть разность хвоста L и списка R;
во всех остальных случаях результат есть множество, полученное добавлением головы L к разности хвоста L и списка R.
*Понадобится дополнительная функция: элемент E входит в список L (см. выше).
(DEFUN DIFF (L R)
(COND
((NULL L) NIL)
((MY_MEMBER (CAR L) R) (DIFF (CDR L) R))
(T (CONS (CAR L) (DIFF (CDR L) R)))
)
)
