Даны три списка объединить их при этом отбросить минимальный элемент - 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).