Loan Reimbursements
/* loan(C, R, N, Frequency, P) is true if the reimbursement of a loan of */
/* amount C at P percent per annum requires N repayments of amount R at */
/* the given Frequency (years, months, weeks or days). Exactly three of */
/* C, R, N and P must be bound. */
/* e.g. loan(62000, 639.96, 180, months, X) gives X = 9.30 */
loan(Capital, Repayment, Duration, Frequency, Percent):-
nonvar(Capital), nonvar(Repayment), nonvar(Duration), nonvar(Frequency),
var(Percent),
repayments_per_year(Frequency, RepaymentsPerYear), !,
RepaymentOverCapital is Repayment / Capital,
Percent0 is 10 / RepaymentsPerYear / 100,
loan_percent(20, RepaymentOverCapital, Duration, Percent0, Percent1),
Percent is Percent1 * RepaymentsPerYear * 100.
loan(Capital, Repayment, Duration, Frequency, 0):-
nonvar(Capital), nonvar(Duration), nonvar(Frequency),
var(Repayment), !,
Repayment is Capital / Duration.
loan(Capital, Repayment, Duration, Frequency, Percent):-
nonvar(Capital), nonvar(Duration), nonvar(Frequency), nonvar(Percent),
var(Repayment),
repayments_per_year(Frequency, RepaymentsPerYear), !,
Percent1 is Percent / RepaymentsPerYear / 100,
Repayment is Capital * Percent1 / (1 - aln(-Duration * ln(1 + Percent1))).
loan(Capital, Repayment, Duration, Frequency, 0):-
nonvar(Capital), nonvar(Repayment), nonvar(Frequency),
var(Duration), !,
Duration is Capital / Repayment.
loan(Capital, Repayment, Duration, Frequency, Percent):-
nonvar(Capital), nonvar(Repayment), nonvar(Frequency), nonvar(Percent),
var(Duration),
repayments_per_year(Frequency, RepaymentsPerYear), !,
Percent1 is Percent / RepaymentsPerYear / 100,
Duration is ln(Repayment / (Repayment - Percent1 * Capital)) /
ln(1 + Percent1).
loan(Capital, Repayment, Duration, Frequency, 0):-
nonvar(Repayment), nonvar(Duration), nonvar(Frequency),
var(Capital), !,
Capital is Repayment * Duration.
loan(Capital, Repayment, Duration, Frequency, Percent):-
nonvar(Repayment), nonvar(Duration), nonvar(Frequency), nonvar(Percent),
var(Capital),
repayments_per_year(Frequency, RepaymentsPerYear), !,
Percent1 is Percent / RepaymentsPerYear / 100,
Capital is Repayment / Percent1 * (1 - aln(-Duration * ln(1 + Percent1))).
loan_percent(0, _, _, Percent, Percent):-!.
loan_percent(I, RepaymentOverCapital, Duration, Percent0, Percent):-
I1 is I - 1,
Percent1 is RepaymentOverCapital * (1 - aln(-Duration * ln(1 + Percent0))),
loan_percent(I1, RepaymentOverCapital, Duration, Percent1, Percent).
repayments_per_year(years, 1).
repayments_per_year(months, 12).
repayments_per_year(weeks, 52).
repayments_per_year(days, 365).
LPA Index
Home Page