Структуры: определить фамилии студентов, имеющих задолженность хотя бы по одному предмету - 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
Объяснение кода листинга программы
- Определяется функция
pred
, которая принимает студента в качестве аргумента и возвращает список его предметов, отсортированный в порядке возрастания. - Определяется функция
show
для отображения фамилий студентов, у которых есть задолженность по одному или более предметам. - В функции
show
используется функцияmapcar
для извлечения имен студентов из списка студентов. - Функция
remove-if-not
используется для удаления студентов, у которых нет задолженности по одному или более предметам. - Используется функция
format
для отображения результатов в виде строки. - В примере кода список студентов содержит 7 элементов.
- Выводится список фамилий студентов, у которых есть задолженность по одному или более предметам:
Petrov
,Nikolayev
,Grigoreva
,Mironov
.