Определить количество положительных элементов строк матрицы 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).