Главная

ПРОЕКТ "ЧЕЛОВЕК. ЗЕМЛЯ. ВСЕЛЕННАЯ"

Инструменты пользователя

Инструменты сайта


project:prolog:listing:sluzhaschie



Программа "Служащие"

Программа демонстрирует метод отката после неудачи с предикатом fail.

Программа:

  • выводит полный список служащих;
  • выводит список мужчин;
  • расчитывает почасовую оплату.

В программе формирования платежной ведомости предикат employee имеет пять объектов:

/* служащий(имя, пол, отдел, почасовая_оплата, часы) */
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 (выдать отчет о выплатах) заключается в формировании отчета. Оно вызывает правило compute_gross_pay для вычисления выплат.

domains
 
name, sex, department = symbol
pay_rate,hours, gross_pay = real
 
predicates
/* служащий(имя, пол, отдел, почасовая_оплата, часы) */
employee(name,sex,department,pay_rate,hours)
 
/* правило для вывода списка всех сотрудников */
/* show_all_part_time_employees */ 
/* правило для вывода списка всех мужчин */
/* show_male_part_time */
/* правило для вывода отчета */
 make_pay_roll_report
/* правило для расчета почасовой оплаты (с объектами)*/
 compute_gross_pay(pay_rate,hours,gross_pay)
 
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).
 
/* Вывести весь список служащих */
/* show_all_part_time_employees :- employee(Name,Sex,Dept,Payrate), write(Name, " ", Sex, " ", Dept, " ", Payrate),nl, fail. */
 
/* Правило для генерации списка служащих мужского пола */
/* show_male_part_time :- employee(Name, Sex, Dept, Pay_rate),Sex="M", write(Name, " ", Dept, " ", Sex, " ", Pay_rate),nl,fail. */
 
/* Правило для расчёта выплат: почасовая оплата х количество часов */
compute_gross_pay(Pay_rate,Hours,Gross_pay) :- Gross_pay = Pay_rate * Hours.
 
/* Отчёт о выплатах служащим */
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.
 
goal
/* write("Список всех служащих:"), nl, nl, show_all_part_time_employees. */
/* write("Служащие мужского пола:"), nl, nl, show_male_part_time. */
write("Отчет о выплатах служащим"), nl, nl, make_pay_roll_report.

!!Рекомендуем: Семейная Энциклопедия ЗдоровьяЧто должен знать современный человек?Самоанализ. Работа над собойОглавлениеГлавная сайта

Обсуждение

Ваш комментарий:
C P E H᠎ R
 
project/prolog/listing/sluzhaschie.txt · Последние изменения: 2023/09/03 22:22 (внешнее изменение)

Вы можете оставить свои комментарии в разделе "Обсуждение".
Рекомендуем оформить подписку на новости данного раздела. Для этого нажмите на кнопку "Подписаться", расположенную справа снизу каждой страницы (знак конверта).

Индекс цитирования