Объединение списков по условию - Lisp
Формулировка задачи:
(defun eqlists (lst1 lst2) ((and (null lst1)(null lst2)) T) ((or (and (null lst1)(not (null lst2))) (and (not (null lst1))(null lst2)) (not (equal (car lst1)(car lst2)))) nil) (eqlists (cdr lst1)(cdr lst2))) (defun pro (lst) ((null list) 0) (* (car lst1) (cdr lst2)))) (defun append (lst1 lst2) ((and (null lst1) (null lst2)) nil) ((null lst1) lst2) ((null lst2) lst1) (cons (car lst1)(append (cdr lst1) lst2)))
Решение задачи: «Объединение списков по условию»
(defun uni (w v) (when (and w v) (if (plusp (* (car w) (car v))) (append (last w) (last v)) (append (last w) (cdr v))))) > (uni '(1 2 3 4) '(5 6 7 8)) (4 8) > (uni '(1 2 3 4) '(-5 6 7 8)) (4 6 7 8)
Объяснение кода листинга программы
В коде определён вспомогательный функциональный символ uni, который принимает два списка в качестве аргументов. Если список w и список v не пустые, то с помощью условия проверяется, являются ли их первые элементы числовыми значениями. Если это так, то с помощью функции car извлекаются эти числовые значения, которые затем используются в качестве аргументов для вычисления значения функции plusp. Если первый элемент списка w больше нуля, то с помощью функции append объединяются последние элементы списков w и v. Если же первый элемент списка w меньше или равен нулю, то с помощью функции append объединяются последний элемент списка w и список v. Пример использования функции: (uni '(1 2 3 4) '(5 6 7 8)) (uni '(1 2 3 4) '(-5 6 7 8))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д