Структуры: определить фамилии студентов, имеющих задолженность хотя бы по одному предмету - Lisp

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

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

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

Решение задачи: «Структуры: определить фамилии студентов, имеющих задолженность хотя бы по одному предмету»

textual
Листинг программы
(defun pred (student)
  (some (lambda (x) (< x 3)) (cddr student)))
 
(defun show (students-list)
  (format t "~{~a~%~}" 
      (mapcar 'car 
          (remove-if-not 'pred students-list))))
 
CL-USER> (show '(("Petrov" "VS" 2 3 3)
         ("Ivanov" "VT" 4 5 4)
         ("Sidorov" "PM" 5 5 5)
         ("Nikolayev" "PI" 3 2 4)
         ("Grigoreva" "IS" 2 2 3)
         ("Muratova" "IS" 5 5 4)
         ("Mironov" "VS" 4 5 2)))
Petrov
Nikolayev
Grigoreva
Mironov
NIL

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

  1. Определяется функция pred, которая принимает студента в качестве аргумента и возвращает список его предметов, отсортированный в порядке возрастания.
  2. Определяется функция show для отображения фамилий студентов, у которых есть задолженность по одному или более предметам.
  3. В функции show используется функция mapcar для извлечения имен студентов из списка студентов.
  4. Функция remove-if-not используется для удаления студентов, у которых нет задолженности по одному или более предметам.
  5. Используется функция format для отображения результатов в виде строки.
  6. В примере кода список студентов содержит 7 элементов.
  7. Выводится список фамилий студентов, у которых есть задолженность по одному или более предметам: Petrov, Nikolayev, Grigoreva, Mironov.

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

14   голосов , оценка 4.286 из 5
Похожие ответы