Продублировать символ в списке - Lisp

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

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

Нужно проверить список,если в списке содержится только один нужный символ, то его нужно продублировать,если больше одного символа то вывести Nill.Пример: (f (list 1 2 3 4 g 5 6 7) g) Ответ: (1 2 3 4 g g 5 6 7)

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

textual
Листинг программы
(defun task (lst a)
  (let ((c (- (length lst) (length (remove a lst)))))
    (cond ((zerop c) lst)
          ((= c 1) (apply 'append (mapcar #'(lambda (x) (if (eq x a) (list a a) (list x))) lst)))
          (t nil))))
 
==> task
 
(task '(1 2 3 4 g 5 6 7) 'g)
 
==> (1 2 3 4 g g 5 6 7)
 
(task '(1 2 3 4 g 5 g 6 7) 'g)
 
==> NIL
 
(task '(1 2 3 4 5 6 7) 'g)
 
==> (1 2 3 4 5 6 7)

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

В коде определена функция task, которая принимает два аргумента: список lst и символ a. Список lst продублирует символ a в указанном месте. Для этого используется функция remove, которая удаляет все вхождения символа a из списка lst. Затем с помощью функции length вычисляется разница между длиной исходного списка и длиной списка без символа a. Если разница равна нулю, то список lst уже содержит символ a в нужном количестве, и функция возвращает его. Если разница равна единице, то с помощью функции append объединяются два списка: lst и список, содержащий символ a. Затем с помощью функции mapcar создается новый список, в котором каждый элемент исходного списка lst заменяется на пару символов a, если он равен символу a, и остаётся неизменным в противном случае. Если разница больше единицы, то функция возвращает nil. Примеры использования функции task показывают, что если передать в качестве аргумента список, в котором уже есть символ a в нужном количестве, то список возвращается без изменений. Если же символ a отсутствует или присутствует в неправильном количестве, то в список вставляются недостающие или лишние символы a.

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


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

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

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