Матрицы - Lisp
Формулировка задачи:
Решение задачи: «Матрицы»
(defun percentage (w &aux (v (loop for a in w nconc a)) (n (length v))) (loop for a in (sort (remove-duplicates v) #'<) collect `(,a ,(* (float (/ (count a v) n)) 100)))) > (percentage '((1 2 3 4 5) (0 4 5 2 3) (3 3 4 4 5) (5 5 0 0 1) (4 5 2 3 1))) ((0 12.0) (1 12.0) (2 12.0) (3 20.0) (4 20.0) (5 24.0))
Объяснение кода листинга программы
В этом коде определенная функция с именем percentage
, которая принимает аргумент w
, который является списком списков целых чисел. Функция также имеет необязательный аргумент aux
, который не используется в этом коде.
Внутри функции percentage
создается переменная v
, которая инициализируется значением (loop for a in w nconc a)
. Это выражение создает список, объединяя все элементы каждого вложенного списка в w
в один список.
Затем создается переменная n
, которая инициализируется значением (length v)
. Это выражение вычисляет длину списка v
.
Далее, в цикле loop
перебираются элементы списка a
, который получен после сортировки и удаления дубликатов из v
с помощью функции sort
и remove-duplicates
соответственно. На каждой итерации цикла создается строка, которая представляет процентное соотношение числа элементов, соответствующих текущему элементу a
, от общего числа элементов в v
. Строка затем добавляется в результат с помощью функции collect
.
Наконец, функция percentage
возвращает список результатов.
Пример использования функции показывает, как она применяется к списку списков целых чисел ((1 2 3 4 5) (0 4 5 2 3) (3 3 4 4 5) (5 5 0 0 1) (4 5 2 3 1))
. Результатом является список ((0 12.0) (1 12.0) (2 12.0) (3 20.0) (4 20.0) (5 24.0))
, который представляет процентное соотношение каждого уникального элемента в исходном списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д