Объединение списков по условию - 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))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д