Объединение списков по условию - 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)))
А как объединить все воедино подскажите?

Решение задачи: «Объединение списков по условию»

textual
Листинг программы
(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))

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


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

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

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