Рекурсивные алгоритмы и функции - Lisp

Узнай цену своей работы

Формулировка задачи:

Добрый вечер Помогите. Желательно на XLisp-е Пусть даны две матрицы A(m*n),B(m*n), состоящие из вещественных чисел. Необходимо получить матрицу C(m*n), где элемент Ci,j равен сумме элементов i-й строки матрицы A, которые отсутствуют в j-м столбце матрицы B. Напишите функцию вычисления Ci,j, использующую функцию проверки наличия числа в j- столбце матрицы B.
Скорей всего в HomeLisp только пол-ся)

Решение задачи: «Рекурсивные алгоритмы и функции»

textual
Листинг программы
(defun get-row (x n) (car (subseq x (1- n) n)))
 
(defun transp (x)
  (apply 'mapcar (cons 'list x)))
  
(defun get-col (x n) (get-row (transp x) n))
 
(defun diff-set (a b)
  (let ((r nil))
     (dolist (i a r) (when (not (member i b)) (push i r))))) 
 
(defun task (a b)
  (let ((m (length a))
        (n (length (car a)))
        (r nil)
        (c nil))
       (dotimes (i m c)
         (setq r nil)
         (dotimes (j m t)
           (setq r (append r (list (apply '+ (diff-set (get-row a (+ i 1)) (get-col b (+ j 1))))))))
         (setq c (append c (list r))))))  
 
(defmacro push (a s) `(setq ,s (cons ,a ,s)))

Объяснение кода листинга программы

Код решает задачу нахождения разности множеств строк таблицы и состоит из следующих функций:

  1. get-row — принимает два аргумента: x и n. Вспомогательная функция для получения n-й строки из таблицы x.
  2. transp — принимает один аргумент: x. Функция для транспонирования таблицы x.
  3. get-col — принимает два аргумента: x и n. Вспомогательная функция для получения n-го столбца из таблицы x.
  4. diff-set — принимает два аргумента: a и b. Функция для нахождения разности множеств a и b.
  5. task — принимает два аргумента: a и b. Главная функция, которая рекурсивно обходит таблицу и находит разность множеств строк.
  6. push — макрос для добавления элемента в начало списка.

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


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

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

13   голосов , оценка 4.385 из 5