Кредитная история представлена в виде подсписка.Организовать выбор клиентов по своевременности возврата кредит - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д