Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Простой вопрос по механизму нахождения цели
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Feofilakt Feofilakt вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.02.2012
Адрес: Иркутск
По умолчанию Простой вопрос по механизму нахождения цели - 25.02.2012, 13:27

Здравствуйте, объясните пожалуйста, почему "arg2" выводится бесконечно? Что не так с правилом my_predicate(Y,X):-my_predicate(X,Y) ?
prolog Код:
implement main
open core,console
class predicates
    my_predicate:(string,string) nondeterm(i,o)(o,i).
constants
    className = "main".
    classVersion = "".
clauses
    classInfo(className, classVersion).
    my_predicate("arg1", "arg2").
    my_predicate(Y,X) :- my_predicate(X,Y).
    run() :- init(), my_predicate("arg1",Z), write(Z), fail.
    run() :- _=readChar().
end implement main
goal
    mainExe::run(main::run).
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,035
Сказал(а) спасибо: 2
Поблагодарили 323 раз(а) в 322 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 25.02.2012, 16:40

Вы написали бесконечную рекурсию, которая будет выполняться бесконечно. У Вас нет условия останова рекурсии. Для Вашей цели вот прога должна быть такой:
Visual Prolog Код:
class predicates
    my_predicate:(string,string)nondeterm (i,o).
    my_fact:(string,string) determ(i,o)(o,i).
clauses
my_fact("arg1", "arg2").
my_predicate(X,Y) :- my_fact(X,Y);my_fact(Y,X).
Хотя лично мне совсем не понятно что Вы делаете, не видна задача.
Ответить с цитированием
  (#3 (permalink)) Старый
Feofilakt Feofilakt вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.02.2012
Адрес: Иркутск
По умолчанию 25.02.2012, 17:21

Цель пока только понять, как всё работает, в том числе рекурсия. Хотелось создать коммутативное отношение, с которым потом можно было бы что-нибудь делать... Как я понимаю, дело было в том, что правило my_predicate(Y,X) :- my_predicate(X,Y) применялось бесконечно?

Последний раз редактировалось Feofilakt; 25.02.2012 в 17:27
Ответить с цитированием
  (#4 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,035
Сказал(а) спасибо: 2
Поблагодарили 323 раз(а) в 322 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 25.02.2012, 17:50

Цитата:
Сообщение от Feofilakt Посмотреть сообщение
Как я понимаю, дело было в том, что правило my_predicate(Y,X) :- my_predicate(X,Y) применялось бесконечно?
Да. Рекурсия через раз останавливалась на my_predicate("arg1", "arg2"), а потом fail опять гнал эту рекурсию всё дальше и дальше.
Транзитивное замыкание надо делать так, как я показал в посте №2.
Ответить с цитированием
Пользователь сказал cпасибо:
Feofilakt (25.02.2012)
  (#5 (permalink)) Старый
Feofilakt Feofilakt вне форума
Member
 
Сообщений: 75
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.02.2012
Адрес: Иркутск
По умолчанию 25.02.2012, 17:54

Благодарю, пойду дальше осваивать логический вывод
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простой вопрос iwkas Память 7 22.03.2011 14:27
Простой и Естественный вопрос NITRINO Опросы и мнения 19 19.03.2011 02:24
простой вопрос как 2 на 2 ) bumer13 Любые вопросы от новичков 28 13.02.2011 19:02
Простой вопрос iwkas Материнские платы 11 06.02.2011 20:43
Цели ANUBIS Prolog 1 13.06.2010 19:07
Простой вопрос zg6 Pascal 7 04.06.2007 12:21
Простой вопрос brokit Visual Basic 2 03.04.2006 16:15
Использование внешней цели mitr Prolog 2 21.05.2005 14:37
Простой вопрос! Anonymous Visual Basic 2 25.03.2004 16:35
Числа и Цели на 80х86 левша Информационные технологии 14 29.01.2004 18:20



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов