2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
1

Рекурсия в прологе

30.10.2012, 17:20. Показов 3775. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,имеется код:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PREDICATES 
  nondeterm родитель(symbol,symbol) 
  nondeterm предок(symbol,symbol) 
CLAUSES 
 родитель(пам,боб). 
 родитель(том,боб). 
 родитель(том,лиз). 
 родитель(боб,энн). 
 родитель(боб,пат). 
 родитель(пат,джим). 
 предок(X,Z):- родитель(X,Z). 
 предок(X,Z):- родитель(X,Y), предок(Y,Z). 
 
GOAL 
 предок(том,пат).
в выводе соответственно yes. при изменении цели на
Prolog
1
предок(том,пата).
соответственно no...но стоит изменить последнюю строку на
Prolog
1
предок(X,Z):- предок(Y,Z),родитель(X,Y).
с первой целью всё нормально-со второй ошибка...не знаю почему...
и ещё вопрос,как в прологе работает рекурсия в двух последних строках правил?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2012, 17:20
Ответы с готовыми решениями:

Рекурсия на Прологе
Помогите написать программу на прологе. С помощью рекурсии. Даны набор элементов багажа разного...

Рекурсия в прологе
Здравствуйте. В лабораторной имеется задание составить программу с использованием прямой и, если...

Рекурсия и осечка в Прологе
Пытаюсь сделать лабораторную работу. Тема: рекурсия и осечка в Прологе. Выполнить задание по...

Рекурсия. Рекурсия с мемоизацией. (полная версия в печатном варианте, работа со словами и строками)
Прошу помочь, может было у кого похожее задание, пока выгружу и продолжу выполнять. Буду...

2
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
30.10.2012, 21:31 2
По поводу предок(X,Z):- предок(Y,Z),родитель(X,Y).
Для предок(том,пат) нормально завершается, всего два раза вызывается предикат предок. Остановка происходит потому что происходит срабатывание первого правила. А при вызове предок(том,пата) первое правило не сработает никогда, т.к у пата вообще родителей нет. И получится бесконечный вызов предиката "предок" самим собой. В первом варианте все нормально работает, потому что родитель(X,Y) не выполнится и никакой зациклиности возникать не будет.
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
30.10.2012, 21:52  [ТС] 3
Цитата Сообщение от Грымзик Посмотреть сообщение
По поводу предок(X,Z):- предок(Y,Z),родитель(X,Y).
Для предок(том,пат) нормально завершается, всего два раза вызывается предикат предок. Остановка происходит потому что происходит срабатывание первого правила. А при вызове предок(том,пата) первое правило не сработает никогда, т.к у пата вообще родителей нет. И получится бесконечный вызов предиката "предок" самим собой. В первом варианте все нормально работает, потому что родитель(X,Y) не выполнится и никакой зациклиности возникать не будет.
Вот смотрите немного модифицированный код:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PREDICATES 
  nondeterm родитель(symbol,symbol) 
  nondeterm предок(symbol,symbol) 
CLAUSES 
 родитель(пам,боб). 
 родитель(том,боб). 
 родитель(том,лиз). 
 родитель(боб,энн). 
 родитель(боб,пат). 
 родитель(пат,джим). 
 предок(X,Z):-родитель(X,Z). 
 предок(X,Z):-предок(Y,Z),родитель(X,Y). 
 
GOAL 
 предок(X,Z).
я проанализировал ответы,и впринципе всё правильно,но в конце всё равно ошибка,где по идее программа должна закончиться...если ошибка из-за зацикленности-не подскажите где она начинается?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2012, 21:52
Помогаю со студенческими работами здесь

Шахматы на прологе
Суть в том, чтобы поставить мат черному королю белым королем и ладьей. В Братко, нашла части кода,...

Структуры в прологе
Помогите пожалуйста решить задачу в турбо прологе - Найти все отрезки, которые при вертикальном...

Программа на прологе
Имеются емкости в 4,5,7 литров. Составить программу, которая определяет, сколько нужно емкостей...

Меню на прологе
СОРТИРОВКА ВСТАВКОЙ: domains list=integer* predicates insert_sort (list, list) insert...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru