Кредитная история представлена в виде подсписка.Организовать выбор клиентов по своевременности возврата кредит - Lisp
Формулировка задачи:
В банке собраны сведения о кредитной истории каждого из клиентов (физических лиц): расчетный счет, фамилия клиента, кредитная история. Кредитная история представлена в виде подсписка (<порядковый номер кредита> <код вида кредита> <сумма кредита> <код своевременности погашения>). Организовать выбор клиентов по своевременности возврата кредита. Коды вида кредита: 0 — потребительский; 1 — ипотечный. Коды своевременности погашения: 0 — своевременно; 1 — с опозданием; 2 — не погашен.
Решение задачи: «Кредитная история представлена в виде подсписка.Организовать выбор клиентов по своевременности возврата кредит»
textual
Листинг программы
(defstruct account checking name history) (defun client (n) (when (> n 0) (cons (make-account :checking (read) :name (read) :history (list (read) (read) (read) (read))) (client (1- n))))) (defun names (w code) (loop for a in w when (equalp (cadddr (account-history a)) code) collect (account-name a))) (defun code-names (w) (names w (read))) > (setf account (client 3)) 1111 Jennifer 123 0 1000 1 2222 Michelle 456 1 1000 0 3333 Suzanne 789 1 2000 1 (#S(ACCOUNT :CHECKING 1111 :NAME JENNIFER :HISTORY (123 0 1000 1)) #S(ACCOUNT :CHECKING 2222 :NAME MICHELLE :HISTORY (456 1 1000 0)) #S(ACCOUNT :CHECKING 3333 :NAME SUZANNE :HISTORY (789 1 2000 1))) > (code-names account) 0 (MICHELLE) > (code-names account) 1 (JENNIFER SUZANNE)
Объяснение кода листинга программы
- Сначала определяется структура данных для представления аккаунта клиента, с помощью функции
defstruct, которая называетсяaccount. Эта структура содержит три поля:checking(типinteger),name(типstring) иhistory(типlist). - Затем определена функция
client, которая принимает целочисленный аргументnи генерирует список изnаккаунтов. Каждый аккаунт создается с помощью функцииmake-account, которая принимает три аргумента:checking,nameиhistory. Значение поляcheckingустанавливается с помощью функцииread, которая считывает целочисленное значение из стандартного ввода. Значения полейnameиhistoryустанавливаются аналогичным образом, с использованием функцииreadдля считывания строковых значений. - Функция
namesпринимает два аргумента:w(список аккаунтов) иcode(код клиента). Она использует циклloopдля перебора аккаунтов в спискеw. Если значение поляhistoryтекущего аккаунта равноcode, то функцияcollectсобирает значение поляnameэтого аккаунта. - Функция
code-namesявляется вспомогательной функцией, которая вызываетnamesс аргументомaccount(список аккаунтов), который был создан ранее. - После вызова функции
code-namesс аргументомaccount, на стандартный вывод выводится список имен клиентов, соответствующих указанному коду. В данном случае, сначала выводится код0, за которым следуют имена клиентов в порядке их появления в списке аккаунтов:JENNIFER,MICHELLE,SUZANNE.