- •II вопрос
- •Формулировку рекурсивного определения
- •Программную реализацию на языке lisp
- •На Лиспе решить задачу переворачивания данного списка.
- •На Лиспе решить задачу получения длины списка.
- •На Лиспе решить задачу получения начала непустого списка.
- •На Лиспе решить задачу нахождения пересечения двух списков-множеств.
- •На Лиспе решить задачу объединения двух списков-множеств.
- •На Лиспе решить задачу получения разности двух списков-множеств.
- •На Лиспе решить задачу проверки двух списков на множественное равенство.
- •На Лиспе решить задачу проверки, является ли одно множество подмножеством другого.
- •На Лиспе реализовать функцию нахождения нод двух натуральных чисел.
- •На Лиспе реализовать функцию нахождения суммы элементов списка.
- •На Лиспе реализовать функцию нахождения максимального элемента списка.
- •На Лиспе реализовать функцию подсчета количества вхождений данного элемента в список.
- •На Лиспе реализовать задачу проверки вхождения данного элемента в список.
- •На Лиспе реализовать функцию вычисления факториала.
- •На Лиспе реализовать функцию добавления элемента в упорядоченный список, не нарушая упорядоченности.
- •На Лиспе реализовать функцию сортировки списка.
- •На Лиспе реализовать функцию удаления всех элементов e из списка.
- •На Лиспе реализовать функцию нахождения последнего элемента непустого списка.
- •На Лиспе реализовать функцию нахождения n-го числа Фибоначчи
На Лиспе реализовать функцию подсчета количества вхождений данного элемента в список.
Определение:
0, если список пустой;
если голова списка совпадает с заданным значением, 1 + количество вхождений заданного элемента в хвост списка;
в остальных случаях - количество вхождений заданного элемента в хвост списка.
(defun myCOUNT (E L)
(cond
((null L) 0)
((= E (car l)) (+ 1 (myCOUNT (E (cdr l)))))
(T (myCOUNT (E (cdr l))))
)
)
На Лиспе реализовать задачу проверки вхождения данного элемента в список.
Определение:
если список пуст, то элемент не принадлежит списку;
если элемент равен голове списка, то он принадлежит этому списку;
во всех остальных случаях проверяем, принадлежит ли элементу хвосту списка.
(defun my_member (E L)
(cond
((null L) nil)
((= E (car L)) T)
(T (my_member E (cdr l)))
)
)
(MY_MEMBER 6 '(2 3 5))
NIL
На Лиспе реализовать функцию вычисления факториала.
Определение: Факториал числа n - это
1, если n = 0;
n * факториал (n – 1) - в противном случае.
(defun !(n)
(cond
((= n 0)1)
(T (* n (! (- n 1))))
)
)
(! 5) вызов
На Лиспе реализовать функцию добавления элемента в упорядоченный список, не нарушая упорядоченности.
Определение: ВСТАВИТЬ элемент в список, упорядоченный по неубыванию, — это
если список пуст, добавить элемент в качестве головы;
если он меньше головы, добавить его в качестве головы;
в противном случае добавить голову данного списка к списку, полученному вставкой элемента в хвост данного списка, не нарушая упорядоченности.
(DEFUN IN_SORT (X L)
(COND
((NULL L) (CONS X L))
((<= X (CAR L)) (CONS X L))
(T (CONS (CAR L) (IN_SORT X (CDR L))))
)
)
На Лиспе реализовать функцию сортировки списка.
(Понадобится функция из вопроса 16)
Определение: ОТСОРТИРОВАТЬ СПИСОК — это:
не трогать его, если он одноэлементен;
в противном случае добавить его голову в отсортированный хвост, не нарушая упорядоченности.
(DEFUN MY_SORT (L)
(COND
((NULL (CDR L)) L)
(T (IN_SORT (CAR L) (MY_SORT (CDR L))))
)
)
На Лиспе реализовать функцию удаления всех элементов e из списка.
Определение:
если список пуст, то результат пустой список;
если удаляемый элемент равен голове списка, то результат — результат удаления таких элементов из хвоста;
во всех остальных случаях результат - список, полученный присоединением головы данного списка к результату удаления данного элемента из хвоста списка.
(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))))
)
)
