Получить из списка произвольных атомов список атомов, которые в исходном списке встречаются один раз - Lisp

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

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

Построить список атомов, которые встречаются в заданном списке ровно один раз.

Решение задачи: «Получить из списка произвольных атомов список атомов, которые в исходном списке встречаются один раз»

textual
Листинг программы
(defun task (lst)
  (cond ((null lst) nil)
        ((member (car lst) (cdr lst)) (task (remove (car lst) (cdr lst))))
        (t (cons (car lst) (task (cdr lst))))))
 
==> TASK
 
(task '(a b c d b c))
 
==> (A D)

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

В данном коде определена функция TASK, которая принимает в качестве аргумента список произвольных атомов. Если список пустой, то возвращается NIL. Если в списке есть повторяющиеся атомы, то в ходе рекурсивных вызовов функции TASK, сначала проверяется, является ли первый элемент списка (car lst) повторяющимся. Если это так, то он удаляется из списка (remove (car lst) (cdr lst)) и функция вызывается рекурсивно для оставшейся части списка (task (cdr lst)). Если первый элемент не является повторяющимся, то он добавляется в начало результата (cons (car lst) (task (cdr lst))) и функция вызывается рекурсивно для оставшейся части списка (task (cdr lst)). Таким образом, функция TASK возвращает список уникальных атомов из исходного списка. Пример использования функции TASK: (task '(a b c d b c)) Результат выполнения: (A D)

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


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

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

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