Даны три списка объединить их при этом отбросить минимальный элемент - Lisp
Формулировка задачи:
mapcon
берет i-тые элементы из трех списков,вычисляет минимальный элемент и отбрасывает его,добавляя в список только два элемента. Пример: (list 1 2 3 4) (list 5 4 3 2) (list 3 4 5 6) шаг 1: берем a1,b1,c1 и находим среди них минимальный элемент 1,5,3=> будет 1.Добавляем в новый список только 5 и 3 шаг 2: берем a2,b2,c2 и находим среди них минимальный элемент 2,4,4=> будет 2.Добавляем в список только 4 и 4 и т.д.Решение задачи: «Даны три списка объединить их при этом отбросить минимальный элемент»
(defun task (a1 a2 a3) (mapcon #'(lambda (x y z) (cond ((<= (car x) (car y) (car z)) (list (car y) (car z))) ((<= (car y) (car x) (car z)) (list (car x) (car z))) (t (list (car x) (car y))))) a1 a2 a3)) ==> task (task '(1 22 33 44) '(11 2 33 44) '(11 22 33 4)) ==> (11 11 22 22 33 33 44 44)
Объяснение кода листинга программы
В коде определена функция task
, которая принимает три аргумента a1
, a2
и a3
. Функция объединяет эти три списка в один, при этом отбрасывая минимальный элемент.
Список, представленный в виде (1 22 33 44)',
(11 2 33 44)' и (11 22 33 4)
, является входным данными для функции task
.
В функции task
используется функция mapcon
, которая применяет к каждому элементу входного списка анонимную функцию. Анонимная функция (lambda (x y z)
принимает три аргумента x
, y
и z
. Внутри функции происходит проверка условий с использованием оператора <=
.
Если (car x)
меньше или равно (car y)
и (car z)
, то возвращается новый список, состоящий из (car y)
и (car z)
. Если (car y)
меньше или равно (car x)
и (car z)
, то возвращается новый список, состоящий из (car x)
и (car z)
. В противном случае возвращается новый список, состоящий из (car x)
и (car y)
.
Результатом работы функции task
для входных данных (1 22 33 44)',
(11 2 33 44)' и (11 22 33 4)
будет список (11 11 22 22 33 33 44 44)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д