Определить количество положительных элементов строк матрицы A(10,20) и запомнить их в одномерном массиве - Lisp
Формулировка задачи:
- (defun task (matr)
- (mapcar #'(lambda (r) (count-if 'minusp r)) matr))
- ==> task
- (task '((1 2 3 4 5) (9 -5 8 -7 0) (-1 -2 -3 -4 0) (1 2 -3 4 5) (-1 2 3 -4 5)))
Решение задачи: «Определить количество положительных элементов строк матрицы A(10,20) и запомнить их в одномерном массиве»
- (defun ma (w
- &aux
- (v (loop for a in w collect
- (loop for e in a
- when (plusp e) count e))))
- (make-array (length v) :initial-contents v))
- > (ma '((1 2 3 4 5) (9 -5 8 -7 0) (-1 -2 -3 -4 0) (1 2 -3 4 5) (-1 2 3 -4 5)))
- #(5 2 0 4 3)
Объяснение кода листинга программы
Функция ma
принимает строку w
в качестве входного аргумента. Внутри функции создается вспомогательная переменная v
, которая инициализируется значением, полученным в результате выполнения цикла loop
для каждого элемента строки w
. Внутри цикла loop
для каждого элемента a
из строки w
выполняется вложенный цикл loop
, который ищет положительные элементы e
и увеличивает счетчик count
на единицу каждый раз, когда он находит положительный элемент. Значение count
в конечном итоге сохраняется в массиве v
.
Функция make-array
используется для создания одномерного массива, заполненного значениями из массива v
. Результатом выполнения функции ma
для строки w
будет новый массив, содержащий результаты подсчета положительных элементов в каждой строке исходной матрицы. В данном примере результатом будет массив #(5 2 0 4 3)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д