БД студентов - Lisp
Формулировка задачи:
Создать Бд студентов:
nost = Ф.И.О.
nof = название факультета
noch = название кафедры
grid = шифр группы
bd = день рождения
addr = адрес
tel = телефон
(defmacro add-student (base nost nof noch grid bd addr tel)
`(let ((num (if (null ,base) 1 (+ 1 (caar ,base)))))
(push (list num ,nost ,nof, noch, grid, bd, addr, tel) ,base)))
(defun show-by-noch (base n)
(dolist (p base 'Not_found)
(when (= (cadddr p) n) (printline (car p)) (return 'ok))))
(setq *base* nil)
(add-student *base* "Sidorov A.A." "ABC" "ZXC" "321" "01-01-1994" "Khm, Ternopilska 14" "095-555-32-32")
(add-student *base* "Sidorov A.A." "ABC" "QWE" "322" "02-02-1994" "Lviv, Banderu 44" "095-444-81-90")
(add-student *base* "Sidorov A.A." "ABC" "ZXC" "323" "03-03-1994" "Lyck, Peremogu 73" "095-354-31-99")
(show-by-noch *base* "QWE")
Вывести ФИО студентов, обучающихся на кафедре "QWE"
Выдает следующие: символ nof не имеет значения (не связан).
Решение задачи: «БД студентов»
textual
Листинг программы
(defun show-by-noch (base n) (dolist (p base 'Not_found) (when (equal (nth 3 p) n) (printline (nth 1 p)))))
Объяснение кода листинга программы
В данном коде:
- Создаётся функция
show-by-nochс двумя аргументамиbaseиn. - В функции используется
dolist, который перебирает элементыbase. - Если элемент
pравенn, то выводится первый элемент этого элемента. - Если элемент
pне равенn, то ничего не происходит.