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

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

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

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

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

textual
Листинг программы
INSOMNIA> (defclass human ()
            ((surname :accessor surname
                      :initarg :surname
                      :initform (error "Фамилия: признак должен присутствовать обязательно"))
             (birth :accessor birth
                    :initarg :birth)
             (gender :accessor gender
                     :initarg :gender
                     :initform (error "Пол: признак должен присутствовать обязательно"))
             (height :accessor height
                     :initarg :height
                     :initform (error "Рост: признак должен присутствовать обязательно"))
             (weight :accessor weight
                     :initarg :weight)))
#<STANDARD-CLASS HUMAN>
 
INSOMNIA> (defun get-max-height (lst)
            (loop
               with mh = 0
               with surname
               for human in lst
               for height = (height human)
               if (> height mh) do (setf surname (surname human))
               finally (return surname)))
GET-MAX-HEIGHT
 
INSOMNIA> (defun get-average (lst)
            (let ((length (length 
                           (remove-if 
                            #'(lambda (x) (eql (gender x) 'f)) lst))))
              (/
               (reduce #'+ lst
                       :key #'(lambda (x)
                                (if (eql (gender x) 'm)
                                    (height x) 0)))
               length)))
GET-AVERAGE
 
INSOMNIA> (defparameter w '((ivanov 92 m 180 80) (petrova 92 f 160 60) (petrov 92 m 190 90)))
W
 
INSOMNIA> (defparameter classes
            (loop 
               for data in w collect 
                 (destructuring-bind (surname birth gender height weight)
                     data
                   (make-instance 
                    'human
                    :surname surname
                    :birth birth
                    :gender gender
                    :height height
                    :weight weight))))
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