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

Определение: ДЛИНА списка равна

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

  • 1 + длина хвоста списка в противном случае.

(DEFUN MY_LEN (L)

(COND

((NULL L) 0)

(T (+ 1 (MY_LEN (CDR L))))

)

)

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

Определение: НАЧАЛО непустого списка — это

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

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

(DEFUN MY_BEGIN (L)

(COND

((NULL (CDR L)) ()) ; можно использовать NIL вместо ()

(T (CONS (CAR L) (MY_BEGIN (CDR L))))

)

)

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

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

  • если список пуст, то он является множеством;

  • если голова списка входит в его хвост, то он не является множеством;

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

*Понадобится дополнительная функция «элемент 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)))

)

)

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

Определение: Пересечение двух списков-множеств 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))

)

)

  1. На Лиспе решить задачу объединения двух списков-множеств.

Определение: Объединение двух списков-множеств 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)))

)

)

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

Определение: Разность двух списков-множеств 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)))

)

)