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

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

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

  • если голова списка совпадает с заданным значением, 1 + количество вхождений заданного элемента в хвост списка;

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

(defun myCOUNT (E L)

(cond

((null L) 0)

((= E (car l)) (+ 1 (myCOUNT (E (cdr l)))))

(T (myCOUNT (E (cdr l))))

)

)

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

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

  • если список пуст, то элемент не принадлежит списку;

  • если элемент равен голове списка, то он принадлежит этому списку;

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

(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

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

Определение: Факториал числа n - это

  • 1, если n = 0;

  • n * факториал (n – 1) - в противном случае.

(defun !(n)

(cond

((= n 0)1)

(T (* n (! (- n 1))))

)

)

(! 5) вызов

  1. На Лиспе реализовать функцию добавления элемента в упорядоченный список, не нарушая упорядоченности.

Определение: ВСТАВИТЬ элемент в список, упорядоченный по неубыванию, — это

  • если список пуст, добавить элемент в качестве головы;

  • если он меньше головы, добавить его в качестве головы;

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

(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))))

)

)

  1. На Лиспе реализовать функцию сортировки списка.

(Понадобится функция из вопроса 16)

Определение: ОТСОРТИРОВАТЬ СПИСОК — это:

  • не трогать его, если он одноэлементен;

  • в противном случае добавить его голову в отсортированный хвост, не нарушая упорядоченности.

(DEFUN MY_SORT (L)

(COND

((NULL (CDR L)) L)

(T (IN_SORT (CAR L) (MY_SORT (CDR L))))

)

)

  1. На Лиспе реализовать функцию удаления всех элементов 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))))

)

)