Лисп задание с масивом - Lisp

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

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

Привет всем. У меня вот тут такое задание. У меня есть 1 функция
Листинг программы
  1. (defun task (lst &optional (n nil) (np nil))
  2. (cond ((null lst) (append (reverse n) (reverse np)))
  3. ((minusp (car lst)) (task (cdr lst) (cons (car lst) n) np))
  4. (t (task (cdr lst) n (cons (car lst) np )))))
В этой функции введенная строка делает reverse и впереди становятся негативные а потом позитивные числа Мне надо эту функцию переделать в 2 разные функции У меня есть список с нижними списками (( 2 -3 4 0 -2) (-4 0 2) (-3 3 -4 3) ) И надо создать 2 функции где одна делает reverse по

КОЛОНАМ

а другая по

СТРОКЕ

На выводе должно быть 2 результата. По колонам ((-4 -3 -4 0 -2) (-4 0 4) (2 3 2 3) ) По строке ((-3 -2 2 4 0) (-4 0 2) (-3 -4 3 3) )

Решение задачи: «Лисп задание с масивом»

textual
Листинг программы
  1.         (defun part-sort (lst &optional (n nil) (np nil))
  2.           (cond ((null lst) (append (reverse n) (reverse np)))
  3.                 ((minusp (car lst)) (part-sort (cdr lst) (cons (car lst) n) np))
  4.                 (t (part-sort (cdr lst) n (cons (car lst) np )))))
  5.      
  6.         (defun by-rows (lst)
  7.           (mapcar #'part-sort lst))
  8.      
  9.         (defun transp (matr)
  10.           (apply #'mapcar (cons 'list matr)))
  11.      
  12.         (defun by-cols (lst)
  13.           (transp (by-rows (transp lst))))
  14.      
  15.         (defun print-list (lst)
  16.           (dolist (x lst t)
  17.             (princ x) (terpri)))
  18.      
  19.         (print-list (by-rows '(( 2 -3 4 0 -2)(-4 0 2)(-3 3 -4 3))))
  20.      
  21.         (print-list (by-cols '(( 2 -3 4 0 -2)(-4 0 2)(-3 3 -4 3))))

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

В коде присутствуют следующие названия и значения переменных:

  1. part-sort — функция, которая сортирует элементы списка lst по возрастанию, используя разделитель -n и упорядочивая элементы np.
  2. lst — список, который необходимо отсортировать.
  3. n — разделитель, который используется для сортировки элементов lst.
  4. np — список, который упорядочивается с помощью функции part-sort.
  5. by-rows — функция, которая применяет функцию part-sort к каждому элементу списка lst.
  6. transp — функция, которая транспонирует матрицу, представленную в виде списка списков.
  7. by-cols — функция, которая применяет функцию transp к каждому столбцу матрицы.
  8. print-list — функция, которая выводит элементы списка на экран.
  9. t — символ, который используется в качестве разделителя в списке.
  10. matr — матрица, которая транспонируется функцией transp.
  11. x — элемент списка, который выводится на экран функцией print-list.
  12. -4, 0, 2 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  13. -3, 3, -4, 3 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  14. 2, -3, 4, 0, -2 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  15. -4, 0, 2 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  16. -3, 3, -4, 3 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  17. 2, -3, 4, 0, -2 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  18. -4, 0, 2 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  19. -3, 3, -4, 3 - элементы списка, которые используются для тестирования функций by-rows и by-cols.
  20. 2, -3, 4, 0, -2 - элементы списка, которые используются для тестирования функций by-rows и by-cols. Код реализует алгоритм сортировки элементов списка lst по возрастанию с использованием разделителя -n и упорядочивания элементов np. Функция by-rows применяет функцию part-sort к каждому элементу списка lst, а функция by-cols применяет функцию transp к каждому столбцу матрицы, представленной в виде списка списков.

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


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

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

9   голосов , оценка 3.444 из 5

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

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

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