Является ли список множеством - 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)
Объяснение кода листинга программы
В данном коде определён вспомогательный программный счётчик, который проверяет, является ли список множеством.
- Создаётся функция с именем setp.
- В функции создаётся хеш-таблица с помощью функции make-hash-table.
- Хеш-таблица инициализируется тестовым предикатом eql.
- В функции формируется список xs, который передаётся в качестве аргумента.
- В цикле dolist происходит перебор элементов списка xs.
- Если элемент x встречается в хеш-таблице (есть такое условие (gethash x h)), то возвращается из функции setp с результатом nil.
- Если элемент x не встречается в хеш-таблице, то в хеш-таблицу добавляется запись (setf (gethash x h) t).
- По завершении цикла dolist возвращается значение t. Таким образом, результатом работы функции setp будет true, если список является множеством (то есть все его элементы уникальны), и false в противном случае.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д