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

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

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

Привет всем. У меня вот тут такое задание. У меня есть 1 функция
(defun task (lst &optional (n nil) (np nil))
  (cond ((null lst) (append (reverse n) (reverse np)))
        ((minusp (car lst)) (task (cdr lst) (cons (car lst) n) np))
        (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
Листинг программы
        (defun part-sort (lst &optional (n nil) (np nil))
          (cond ((null lst) (append (reverse n) (reverse np)))
                ((minusp (car lst)) (part-sort (cdr lst) (cons (car lst) n) np))
                (t (part-sort (cdr lst) n (cons (car lst) np )))))
     
        (defun by-rows (lst)
          (mapcar #'part-sort lst))
     
        (defun transp (matr)
          (apply #'mapcar (cons 'list matr)))
     
        (defun by-cols (lst)
          (transp (by-rows (transp lst))))
     
        (defun print-list (lst)
          (dolist (x lst t)
            (princ x) (terpri)))
     
        (print-list (by-rows '(( 2 -3 4 0 -2)(-4 0 2)(-3 3 -4 3))))
     
        (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
Похожие ответы