Задача на списки - Lisp

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

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

В произвольном списке найти значение наименьшего из положительных чисел. Если в списке только символы (и подсписки), то вывести символ с минимальным АСКИ-кодом

Решение задачи: «Задача на списки»

textual
Листинг программы
(defun atom2list (a)
  (coerce (string a) 'list))
 
(defun task (lst)
  (let ((num-list (remove-if-not 'numberp lst))
        (sym-list (remove-if-not 'symbolp lst)))
    (cond ((and (null num-list) (null sym-list)) nil)
          (num-list (apply 'min num-list))
          (t  (string (code-char (apply 'min (mapcar #'(lambda (x) (char-code (car (atom2list x)))) sym-list))))))))

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

В коде представлена функция task, которая принимает в качестве аргумента список lst. В функции происходит разбиение списка на два других списка: числовой и символьное. Для этого используется функция remove-if-not, которая удаляет из списка элементы, не удовлетворяющие заданному условию (числа или символы). Далее, с помощью условного оператора cond проверяется, являются ли оба списка (числовой и символьное) пустыми. Если оба списка пусты, то возвращается значение nil. В противном случае, если числовой список не пуст, то возвращается минимальное значение из числового списка, полученное с помощью функции apply и функции min. Если же числовой список пуст, но есть символьный список, то возвращается строка, полученная с помощью функции string и функции code-char, которая получает ASCII-код символа из символьного списка.

  1. (defun atom2list (a) — Функция, преобразующая строку в список. — (coerce (string a) 'list))
  2. (defun task (lst) — Основная функция, принимающая список lst. — (let ((num-list (remove-if-not 'numberp lst)) — (sym-list (remove-if-not 'symbolp lst))) — (cond ((and (null num-list) (null sym-list)) nil) — ((num-list (apply 'min num-list)) — (t (string (code-char (apply 'min (mapcar #'(lambda (x) (char-code (car (atom2list x)))) sym-list)))))))) — Условный оператор проверяет пустоту обоих списков. — Если оба списка пусты, то возвращается nil. — Если числовой список не пуст, то возвращается минимальное значение из числового списка. — Если числовой список пуст, но есть символьный список, то возвращается строка, полученная с помощью функции string и функции code-char.

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


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

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

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