Написать функцию, которая находит чаще всего встречающийся в двумерном массиве атом типа «строка» - Lisp

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

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

Помогите

Решение задачи: «Написать функцию, которая находит чаще всего встречающийся в двумерном массиве атом типа «строка»»

textual
Листинг программы
  1. (defun mx (a
  2.            &aux
  3.            (w (remove-if-not #'stringp (flatten (2d-array-list a))))
  4.            (v (remove-duplicates w :test #'string-equal))
  5.            (z (loop for e in v
  6.                     collect (list e (count e w :test #'string-equal))))
  7.            (m (loop for x in z maximize (cadr x))))
  8.   (loop for e in z when (= (cadr e) m) collect (car e)))
  9.  
  10. (defun 2d-array-list (a)
  11.   (loop for i below (array-dimension a 0)
  12.         collect (loop for j below (array-dimension a 1)
  13.                       collect (aref a i j))))
  14.  
  15. (defun flatten (w)
  16.   (loop for a in w if (listp a)
  17.         nconc (flatten a) else collect a))
  18.  
  19. > (mx #2A(("aa" "bb" "cc") ("aa" "bb" "dd")))
  20. ("aa" "bb")

Объяснение кода листинга программы

В этом коде реализована функция mx, которая находит наиболее часто встречающуюся строку в двумерном массиве.

  1. В строке с номером 1 функция mx объявлена с помощью defun. Аргументом является a, который является двумерным массивом. Также определён вспомогательный список aux.
  2. В строке с номером 4, в aux записывается результат работы функции remove-if-not, которая удаляет все элементы массива a, которые не являются строками. Результат этого выражения — новый массив, состоящий только из строк.
  3. В строке с номером 5, в aux записывается результат работы функции remove-duplicates, которая удаляет все дублирующиеся строки из предыдущего массива.
  4. В строке с номером 6, в aux записывается результат работы цикла, который перебирает все элементы в v, и для каждой строки собирает количество её вхождений в массив w. Таким образом, в z хранятся список строк и количество их вхождений.
  5. В строке с номером 7, в aux записывается результат работы цикла, который перебирает все элементы в z, и для каждой строки проверяет, является ли она наиболее часто встречающейся. Если да, то записывает эту строку в новый массив m.
  6. В строке с номером 10, в aux записывается результат работы цикла, который перебирает все элементы в z, и для каждой строки проверяет, является ли она наиболее часто встречающейся. Если да, то записывает эту строку в новый массив m.
  7. В строке с номером 13, функция 2d-array-list объявлена с помощью defun. Эта функция принимает двумерный массив a и возвращает список всех его элементов.
  8. В строке с номером 14, функция flatten объявлена с помощью defun. Эта функция принимает список w и возвращает одноплоскостный список, состоящий из всех его элементов.
  9. В строке с номером 15, вызывается функция mx с аргументом #2A((aa`bb cc) (aa bb dd). Результатом работы функции является строка ``aa `bb``.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы