77
domains
name, sex, department = symbol
pay_rate,hours, gross_pay = real
predicates
employee(name,sex,department,pay_rate,hours)
make_pay_roll_report
compute_gross_pay(pay_rate,hours,gross_pay)
goal
write("Отчет о выплатах служащим"),
nl, nl,
make_pay_roll_report.
clauses
employee("John Walker ","M","ACCT",3.50,40.00).
employee("Tom Sellack ","M","OPER",4.50,36.00).
employee("Betty Lue ","F","DATA",5.00,40.00).
employee("Jack Hunter ","M","ADVE",4.50,25.50).
employee("Sam Ray ","M","DATA",6.00,30.00).
employee("Sheila Burton ","F","ADVE",5.00,32.50).
employee("Kelly Smith ","F","ACCT",5.00,25.50).
employee("Diana Prince ","F","DATA",5.00,20.50).
make_pay_roll_report :-
employee(Name,_,Dept,Pay_rate,Hours),
compute_gross_pay(Pay_rate,Hours,Gross_pay),
write(Name,Dept," $", Gross_pay),nl,
fail.
compute_gross_pay(Pay_rate,Hours,Gross_pay) :-
Gross_pay = Pay_rate * Hours.
_________________________________________________________
В программе формирования платежной ведомости предикат em-
ployee имеет пять объектов:
employee(name,sex,department,pay_rate,hours)
/* служащий(имя, пол, отдел, почасовая_оплата, часы) */
Так как объекты pay_rate (почасовая оплата), hours
(часы) и gross_pay
(выплата) принадлежат домену типа real, то над ними можно выполнять опе-
рации десятичной арифметики. Правило для вычисления выплаты несложно:
compute_gross_pay(Pay_rate, Hours, Gross_pay) :-
Gross_pay=Pay_rate*Hours.
Задача правила make_pay_roll_report (выдать отчет о выплатах) за-
ключается в формировании отчета. Оно вызывает правило comute_gross_pay
для вычисления выплат.