Определить количество положительных элементов строк матрицы 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)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д