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

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

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

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

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

textual
Листинг программы
  1. (defun get-row (x n) (car (subseq x (1- n) n)))
  2.  
  3. (defun transp (x)
  4.   (apply 'mapcar (cons 'list x)))
  5.  
  6. (defun get-col (x n) (get-row (transp x) n))
  7.  
  8. (defun diff-set (a b)
  9.   (let ((r nil))
  10.      (dolist (i a r) (when (not (member i b)) (push i r)))))
  11.  
  12. (defun task (a b)
  13.   (let ((m (length a))
  14.         (n (length (car a)))
  15.         (r nil)
  16.         (c nil))
  17.        (dotimes (i m c)
  18.          (setq r nil)
  19.          (dotimes (j m t)
  20.            (setq r (append r (list (apply '+ (diff-set (get-row a (+ i 1)) (get-col b (+ j 1))))))))
  21.          (setq c (append c (list r))))))  
  22.  
  23. (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут