Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Clauses. staff("ОСУ","ИИС","лектор","Иванов",30)



staff("ОСУ","ИИС","лектор","Иванов",30).

staff("ОСУ","ИИС","ассистент","Петров",23).

show_staff:- staff(Chair,Subject,Status,Name,Age),

write(Chair,Subject,Status,Name,Age), nl,

fail.

От предыдущей программы эта отличается наличием раздела goal, правила, выводящего на экран сведения, и предиката fail, обеспечивающего повторение этого правила для всех записей базы данных.

Задание:

1.Создайте файл staff1.pro с текстом данной программы и убедитесь в ее работоспособности; отредактируйте ее так, чтобы данные на экране были удобочитаемы.

2.Удалите из правила предикат fail (вместе с предшествующей ему запятой). Чем отличается работа программы в этой редации от предыдущей?

3.Измените программу так, чтобы ее результатом была выдача только фамилий и возрастов работников. Каждая запись должна находиться на отдельной строке.

4.Измените программу так, чтобы сведения выдавались в одной строке и разделялись между собой двумя пробелами.

Возврат
Лабораторная работа № 4а. Использование рекурсии в Turbo-Prolog.

Один из стандартных приемов решения сложной задачи состоит в том, чтобы разбить задачу на более простые подзадачи, решить эти простые задачи, а затем объединить решения подзадач для получения общего решения.

Когда подход к решению подзадач совпадает с подходом к решению задачи в целом, такой процесс решения задачи называется рекурсией. Она используетсякак метод описания программ, выполнению которых предшествует выполнение их собственных копий.

Рекурсивное определение обязательно должно содержать условие, прерывающее процесс рекурсивного обращения.

Рассмотрим, для примера, программу проверки связности в ориентированном графе (орграфе). Орграф можно задать с помощью набора фактов следующего вида:

edge(a, b).

Указанный факт входит в программу, если в графе существуетдуга, идущая из вершины а в вершину b. Пусть дан граф, предстваленный в программе фактами:

edge (a,d). edge (b, a). edge (d, e). edge (e,f).

edge (a, c). edge (b, e). edge (f, b).

Две вершины в орграфе связаны, если существует последовательность ребер, ведущая из первой вершины во вторую. Таким образом, предикат сonnected(B1,В2.) истинен, если В1 и В2 связаны. Тогда процедура, описывающая связность, будет иметь следующий вид:

сonneсted(B 1, В2):- edge(В1, В2).

connected(В1,В2):-edge(Вl, X), connected(Х, В2).

Первое предложение в процедуре - это граничное условие, прерывающее рекурсиное обращение. Смысл утверждения заключается в следующем: вершины В1 и В2 связаны, если в графе есть ребро, определенное фактом edge(В1,В2).

Второе предложение в процедуре - это рекурсивное условие, смысл этого утверждения заключается в следующем: вершины B1 и В2 связаны, если в графе существует последовательность ребер, начинающаяся в В1 и заканчивающаяся в В2, в которой каждое предшествующее ребро имеет общую вершину с последующим. Так, на запрос вида

Goal: сonneсted(a,f).

ответ будет "да" (yes).

Задание:

1.Нарисуйте граф, представленный выше в виде фактов о связи вершин.

2.Напишите и отладьте программу connect.pro, использующую данные выше правила.

3.Преобразуйте ее в программу, фиксирующую связность без учета ориентации ребер.





Дата публикования: 2015-10-09; Прочитано: 228 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...