Имеется список студентов группы - Lisp

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

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

Имеется список студентов группы, в котором указаны фамилия студента, дата рождения, пол, рост и вес. Определить фамилию самого высокого юноши и средний рост студентов мужского пола.

Решение задачи: «Имеется список студентов группы»

textual
Листинг программы
  1. INSOMNIA> (defclass human ()
  2.             ((surname :accessor surname
  3.                       :initarg :surname
  4.                       :initform (error "Фамилия: признак должен присутствовать обязательно"))
  5.              (birth :accessor birth
  6.                     :initarg :birth)
  7.              (gender :accessor gender
  8.                      :initarg :gender
  9.                      :initform (error "Пол: признак должен присутствовать обязательно"))
  10.              (height :accessor height
  11.                      :initarg :height
  12.                      :initform (error "Рост: признак должен присутствовать обязательно"))
  13.              (weight :accessor weight
  14.                      :initarg :weight)))
  15. #<STANDARD-CLASS HUMAN>
  16.  
  17. INSOMNIA> (defun get-max-height (lst)
  18.             (loop
  19.                with mh = 0
  20.                with surname
  21.                for human in lst
  22.                for height = (height human)
  23.                if (> height mh) do (setf surname (surname human))
  24.                finally (return surname)))
  25. GET-MAX-HEIGHT
  26.  
  27. INSOMNIA> (defun get-average (lst)
  28.             (let ((length (length
  29.                            (remove-if
  30.                             #'(lambda (x) (eql (gender x) 'f)) lst))))
  31.               (/
  32.                (reduce #'+ lst
  33.                        :key #'(lambda (x)
  34.                                 (if (eql (gender x) 'm)
  35.                                     (height x) 0)))
  36.                length)))
  37. GET-AVERAGE
  38.  
  39. INSOMNIA> (defparameter w '((ivanov 92 m 180 80) (petrova 92 f 160 60) (petrov 92 m 190 90)))
  40. W
  41.  
  42. INSOMNIA> (defparameter classes
  43.             (loop
  44.                for data in w collect
  45.                  (destructuring-bind (surname birth gender height weight)
  46.                      data
  47.                    (make-instance
  48.                     'human
  49.                     :surname surname
  50.                     :birth birth
  51.                     :gender gender
  52.                     :height height
  53.                     :weight weight))))
  54. CLASSES

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

  1. Создание класса human с атрибутами: фамилия, год рождения, пол, рост, вес.
  2. Создание функции get-max-height, которая находит максимальную высоту среди людей в списке.
  3. Создание функции get-average, которая вычисляет средний рост людей в списке, учитывая только мужчин.
  4. Создание переменной w с списком людей: Иванов (92, м, 180, 80), Петрова (92, ж, 160, 60), Петров (92, м, 190, 90).
  5. Создание переменной classes, которая содержит список объектов класса human, созданных из списка w.

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


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

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

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

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

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

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