- Философия, эзотерика:
- Религии:
- Познавательное
(обо всём)
Программа демонстрирует метод отката после неудачи с предикатом 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.
!!Рекомендуем: Семейная Энциклопедия Здоровья ⇒ Что должен знать современный человек? ⇒ Самоанализ. Работа над собой ⇒ Оглавление ⇒ Главная сайта
Обсуждение