Last active
May 10, 2016 17:31
-
-
Save attatrol/dd45a87e4273359edb9b4ed30ec41f5d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;входная таблица | |
(setq marks '((Иванов ((Матан 2)(Физра 4)(ООП 5)(ФП 3))) | |
(Петров ((Матан 2)(Физра 4)(ФП 2)(ООП 2))) | |
(Уткин ((Физра 3)(ФП 5)(БД 2)(Матан 3)(ООП 4)) | |
))) | |
;выводит список с именами всех студентов, которые получили определенну оценку markValue по предмету subject | |
;использует список-таблицу с инфой по студентам - table | |
(defun getPeopleWithMark(subject markValue table) (progn (setq result nil) | |
(loop for x in table do (if (hasMark subject markValue x) | |
(setq result (cons (car x) result)) | |
nil)) | |
result)) | |
;; проверка на наличие пары предмет-оценка (subject markValue) в списке x некоторого студента | |
(defun hasMark(subject markValue x) (cond ((null x) nil) | |
((atom (car x)) (hasMark subject markValue (cadr x))) | |
((and (eql subject (caar x)) (eql markValue (cadar x))) T) | |
(T (hasMark subject markValue (cdr x))))) | |
;; предикат, истина, если атом x есть в списке l | |
(defun memp (x l) (cond ((and (atom l) (equal l x)) T) | |
((atom l) Nil) | |
((and(atom (car l)) (equal x (car l))) T) | |
((atom (car l)) (memp x (cdr l))) | |
(T (or (memp x (car l)) (memp x (cdr l)))))) | |
;; формирует список существующих предметов | |
(defun getSubjects(table) (setq result nil) (loop for x in table do (loop for y in x do (cond ((atom y) NIL) | |
(T (loop for z in y do (if (memp (car z) result) NIL | |
(setq result (cons (car z) result)))))))) result) | |
;; формирует список из пар предмет-список_двоечников | |
(defun getBadStudents(table) (setq subjects (getSubjects table)) (getBadStudents2 table subjects)) | |
(defun getBadStudents2 (table subjects) (cond ((null subjects) nil) | |
(T (append(list (car subjects) (getPeopleWithMark (car subjects) '2 table)) (getBadStudents2 table (cdr subjects)))))) | |
;; пример использования | |
(getBadStudents marks) -> (БД (УТКИН) ФП (ПЕТРОВ) ООП (ПЕТРОВ) ФИЗРА NIL МАТАН (ПЕТРОВ ИВАНОВ)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment