TURBO PROLOG. Терёхин В.В. - 75 стр.

UptoLike

Составители: 

75
employee("Sheila Burton ","F","ADVE",5.00).
employee("Kelly Smith ","F","ACCT",5.00).
employee("Diana Prince ","F","DATA",5.00).
/* Правило для генерации списка служащих мужского пола */
show_male_part_time :-
employee(Name, "M", Dept, Pay_rate),
write(Name, Dept, "$", Pay_rate),
nl,
fail.
/* Правило для генерации списка служащих отдела обработки данных */
show_data_proc_dept :-
employee(Name, _, "DATA", Pay_rate),
write(Name, "$", Pay_rate),
nl,
fail.
___________________________________________________________
Утверждения программы о служащих содержат данные о служащих
компании, работающих неполный рабочий день. Предикат базы данных
имеет вид:
employee(name, sex, department, pay_rate)
/* служащий(имя, пол, отдел, почасовая_оплата) */
Следующее правило
выдает содержимое всей базы данных:
show_all_part_time_employees :- /* выдать_служаших */
employee(Name,Sex,Dept,Pay_rate),
write(Name, " ", Sex, " ", Dept, " ", Pay_rate),
nl,
fail.
Переменные Name (имя), Sex (пол), Dept (отдел), Pay_rate (почасовая
оплата) не означены, и следовательно, все они могут получить значения.
Если бы это правило являлось целью программы, то результатом выполнения
этой программы был бы список всех служащих с неполным рабочим днем.
Предположим, что необходимо получить список, содержащий данные
только о служащих мужского пола. Для этого требуется, чтобы процесс со-
поставления значений для Sex был успешным только для утверждений, со-
держащих M в позиции второго объекта.
Вспомните гл. 2, где говорилось, что константа сопоставима только
сама с собой. Во время внутренней унификации постоянное
значение M со-
поставимо только с M. Правило, накладывающее это условие на выборку
данных, имеет вид:
show_male_part_time :-
employee(Name,"M", Dept, Pay_rate),
write(Name,Dept, "$",Pay_rate),
nl,
fail.
     employee("Sheila Burton ","F","ADVE",5.00).
     employee("Kelly Smith ","F","ACCT",5.00).
     employee("Diana Prince ","F","DATA",5.00).
/* Правило для генерации списка служащих мужского пола */
     show_male_part_time :-
                           employee(Name, "M", Dept, Pay_rate),
                           write(Name, Dept, "$", Pay_rate),
                           nl,
                           fail.
/* Правило для генерации списка служащих отдела обработки данных */
     show_data_proc_dept :-
                           employee(Name, _, "DATA", Pay_rate),
                           write(Name, "$", Pay_rate),
                           nl,
                           fail.
___________________________________________________________

      Утверждения программы о служащих содержат данные о служащих
компании, работающих неполный рабочий день. Предикат базы данных
имеет вид:
            employee(name, sex, department, pay_rate)
                       /* служащий(имя, пол, отдел, почасовая_оплата) */
Следующее правило выдает содержимое всей базы данных:
show_all_part_time_employees :- /* выдать_служаших */
                             employee(Name,Sex,Dept,Pay_rate),
                             write(Name, " ", Sex, " ", Dept, " ", Pay_rate),
                             nl,
                             fail.
      Переменные Name (имя), Sex (пол), Dept (отдел), Pay_rate (почасовая
оплата) не означены, и следовательно, все они могут получить значения.
Если бы это правило являлось целью программы, то результатом выполнения
этой программы был бы список всех служащих с неполным рабочим днем.
      Предположим, что необходимо получить список, содержащий данные
только о служащих мужского пола. Для этого требуется, чтобы процесс со-
поставления значений для Sex был успешным только для утверждений, со-
держащих M в позиции второго объекта.
      Вспомните гл. 2, где говорилось, что константа сопоставима только
сама с собой. Во время внутренней унификации постоянное значение M со-
поставимо только с M. Правило, накладывающее это условие на выборку
данных, имеет вид:
      show_male_part_time :-
                       employee(Name,"M", Dept, Pay_rate),
                       write(Name,Dept, "$",Pay_rate),
                       nl,
                       fail.


                                                                           75