Является ли список множеством - Lisp

Узнай цену своей работы

Формулировка задачи:

Определите, является ли список множеством, т.е. входит ли каждый элемент списка в него лишь один раз.

Решение задачи: «Является ли список множеством»

textual
Листинг программы
(defun setp (xs &aux (h (make-hash-table :test #'eql)))
  (dolist (x xs)
    (when (gethash x h)
      (return-from setp nil))
    (setf (gethash x h) t))
  t)

Объяснение кода листинга программы

В данном коде определён вспомогательный программный счётчик, который проверяет, является ли список множеством.

  1. Создаётся функция с именем setp.
  2. В функции создаётся хеш-таблица с помощью функции make-hash-table.
  3. Хеш-таблица инициализируется тестовым предикатом eql.
  4. В функции формируется список xs, который передаётся в качестве аргумента.
  5. В цикле dolist происходит перебор элементов списка xs.
  6. Если элемент x встречается в хеш-таблице (есть такое условие (gethash x h)), то возвращается из функции setp с результатом nil.
  7. Если элемент x не встречается в хеш-таблице, то в хеш-таблицу добавляется запись (setf (gethash x h) t).
  8. По завершении цикла dolist возвращается значение t. Таким образом, результатом работы функции setp будет true, если список является множеством (то есть все его элементы уникальны), и false в противном случае.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы