Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу determ, nondeterm, multy, anyflow...
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
Post 25.09.2006, 07:29

Уважаемый Винитарх и др. не помню в каком топике натыкался на примеры по использованию вышеперечисленых predicate mode, но честно говоря ничерта не понял. Можно ли обсудить это подробнее... Что для чего и зачем, и в чем отличие в использовании оных в Vip5 и в Vip6/7. Может ссылки какие есть толковые.
Вот столкнулся например с проблемой... Хочу разобрать строку X :
....
predicates
add_fact : (string) procedure (i).
clauses
add_fact(X) :-
....
string::frontToken(X, Token, Remainder),
.....
string::frontToken определен вроде так:
frontToken : (
string Source,
string Token,
string Remainder)
determadd_fact : (string) procedure (i). (i,o,o).
но все это не компилится : error c631: The predicate 't_facts::add_fact/1 (i)', which is declared as 'procedure', is actually 'determ'clauses

посоветуйте что делать!

Еще позабавила надпись в строке состояния во время сборки ...Build Progress: 3600% :shock:
Ответить с цитированием
  (#2 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
По умолчанию 25.09.2006, 07:41

Сорри, мусор попал... вот так было:
Цитата:
....
predicates
add_fact : (string) procedure (i).
clauses
add_fact(X) :-
....
string::frontToken(X, Token, Remainder),
.....
string::frontToken определен вроде так:
frontToken : (
string Source,
string Token,
string Remainder)
determ (i,o,o).
но все это не компилится : error c631: The predicate 't_facts::add_fact/1 (i)', which is declared as 'procedure', is actually 'determ'clauses
Ответить с цитированием
  (#3 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,862
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 26.09.2006, 00:24

Вы почему то не привели описание предиката add_fact(X).
Но, что бы там ни было, выходов, как обычно, два:
1. Объявить предикат add_fact(X) как determ.
Или
2. Сделать предикат add_fact(X) процедурой (см. самую верхнюю тему "Библиотека по Прологу" - первая страница), ибо add_fact(X) у Вас на самом деле determ, т.к. в его определение входит детерминированный предикат frontToken.
Ответить с цитированием
  (#4 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
По умолчанию 26.09.2006, 14:13

Цитата:
Вы почему то не привели описание предиката add_fact(X).
Но, что бы там ни было, выходов, как обычно, два:
1. Объявить предикат add_fact(X) как determ.
Или
2. Сделать предикат add_fact(X) процедурой (см. самую верхнюю тему "Библиотека по Прологу" - первая страница), ибо add_fact(X) у Вас на самом деле determ, т.к. в его определение входит детерминированный предикат frontToken.
Да я специально выкинул все лишнее из предиката add_fact(X), чтобы не отвлекало. Вопрос именно в этом... Пробовал пойти по первому пути и объявить add_fact(X) как determ, тогда нужно объявлять как determ предикаты, которые вызывают add_fact(X), в т.ч. GUI-вые такие как onClick... и т.п. как то плохо это все выглядит, да проблема как бы не решилась - был один неправильный предикат - стало несколько.. Второй путь, предложеный Вами : немного не понял сути из примеров. "Сделать процедурой" - это значит добиться чтобы предикат мог быть при любых результатах подцелей, всегда истинным?
Ответить с цитированием
  (#5 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,862
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 26.09.2006, 19:55

Примерно так.
см. самую верхнюю тему "Библиотека по Прологу" - первая страница, там показаны примеры переделки предикатов в процедурный режим.
Ответить с цитированием
Ads.
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по nondeterm и procedure tumanovalex Prolog 4 15.02.2012 10:31
как переделать main::run в nondeterm anyflow ? 2QWERY Prolog 10 30.03.2011 19:49
Помогите разобраться с ошибкой "determ" gazelkin23 Prolog 6 13.12.2010 23:17
nondeterm DIZlock Prolog 0 06.04.2010 21:07
The predicate which is declared as 'procedure', is actually determ sna19 Prolog 1 25.09.2007 17:05



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