Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Ввод правил от пользователя
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
rogue_uss rogue_uss вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.09.2006
Thumbs up 29.09.2006, 04:24

По курсу рекурсивно-логическое программирование была дана задача:
Описать разбиение множества на классы эквивалентности (при условии что задано отношение эквивалентности двух элементов множества p(x,y)). Множества должны быть представлены бинарными деревьями.
По сути я сталкнулся с одной проблемой - как ввести от пользователя новое правило и как его использовать. Это вообще реально. Я использую SWI-Prolog версии 5 или около того...

Помогите. Заранее благодарен...
Ответить с цитированием
  (#2 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
По умолчанию 29.09.2006, 11:37

Я бы тоже присоединился к вопросу, только про VIP 7, можно ли в процессе исполнения программы добавлять правила произвольного вида, и чтобы система сразу начинала бы их использовать? Если напрямую нельзя, может есть какая-нибудь стандартная метода как бы это сделать?
Ответить с цитированием
  (#3 (permalink)) Старый
ZhekaS ZhekaS вне форума
Member
 
Сообщений: 53
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.09.2006
По умолчанию 29.09.2006, 13:02

Цитата:
Я бы тоже присоединился к вопросу, только про VIP 7, можно ли в процессе исполнения программы добавлять правила произвольного вида, и чтобы система сразу начинала бы их использовать? Если напрямую нельзя, может есть какая-нибудь стандартная метода как бы это сделать?
Не знаю как в VIP, но в классическом прологе это делается с помощью предикатов asserta и assertz.
Ответить с цитированием
  (#4 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию 29.09.2006, 14:15

Цитата:
Я бы тоже присоединился к вопросу, только про VIP 7, можно ли в процессе исполнения программы добавлять правила произвольного вида, и чтобы система сразу начинала бы их использовать? Если напрямую нельзя, может есть какая-нибудь стандартная метода как бы это сделать?
Цитата:
Не знаю как в VIP, но в классическом прологе это делается с помощью предикатов asserta и assertz.
Ни в одной из версий Vip такой возможности нет.
В Vip для обеспечения такой возможности рекомендуется либо использовать поставляемый интерпретатор классического Пролога PIE, либо правила помещать в текстовый файл, включенный в проект DLL и затем этот проект компилировать на лету и вызывать эту DLL (компилятор в VIP поставляется в виде отдельного приложения).
Ответить с цитированием
  (#5 (permalink)) Старый
ZhekaS ZhekaS вне форума
Member
 
Сообщений: 53
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.09.2006
По умолчанию 29.09.2006, 14:26

Цитата:
Ни в одной из версий Vip такой возможности нет.
В Vip для обеспечения такой возможности рекомендуется либо использовать поставляемый интерпретатор классического Пролога PIE, либо правила помещать в текстовый файл, включенный в проект DLL и затем этот проект компилировать на лету и вызывать эту DLL (компилятор в VIP поставляется в виде отдельного приложения).
Насколько мне известно, SWI он ISO-compliant, так что там, пожалуй, прокатит.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
TypucT TypucT вне форума
Member
 
Сообщений: 336
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2005
По умолчанию 29.09.2006, 14:54

Вот на SWI:
Код:
go:-
        read(NewRule),       % пользователь вводит
        assert(NewRule),     % если понадобится в дальнейшем - добавляем в базу правил
        NewRule.                 % используем
Код:
?- go.
|: my_rule(a,b).
Yes
?- my_rule(X,Y).
X = a
Y = b;
No
Ответить с цитированием
  (#7 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 29.09.2006, 16:37

Что касается самой задачи:
Цитата:
Описать разбиение множества на классы эквивалентности (при условии что задано отношение эквивалентности двух элементов множества p(x,y)).
Если есть список всех элементов множества (можно его найти) и есть отношение эквивалентности, описанное с помощью предиката p (p(X,Y) - это истина тогда и только тогда, когда X~Y), то найти разбиение множества на классы эквивалентности можно, например, так:
Код:
классы([X|ВсеЭлем], [Класс|ФакторМнож]):- 
    findall(Y, p(X,Y), Класс),
    разность(ВсеЭлем, Класс, ОстЭлем),
    классы(ОстЭлем, ФакторМнож).
классы([], []).
Ответить с цитированием
  (#8 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,909
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 30.09.2006, 01:33

Браво Alison!
Только надо добавить, что возможные отношения эквивалентности должны быть известны на этапе проектирования.
Ответить с цитированием
  (#9 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
По умолчанию 02.10.2006, 11:52

Цитата:
Код
go:-
read(NewRule), % пользователь вводит
assert(NewRule), % если понадобится в дальнейшем - добавляем в базу правил
NewRule. % используем


Код
?- go.
|: my_rule(a,b).
Yes
?- my_rule(X,Y).
X = a
Y = b;
No
Немножко неудачный пример. Здесь у тебя правило в виде факта. А факты в VIP можно добавлять на лету, правда не так изящно. Если я не ошибаюсь надо декларировать функтор и арность заранее, но эту беду можно побороть. Я имел ввиду правила вида P :- S,X,Y.
Ответить с цитированием
  (#10 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
По умолчанию 02.10.2006, 12:07

Цитата:
Ни в одной из версий Vip такой возможности нет.
В Vip для обеспечения такой возможности рекомендуется либо использовать поставляемый интерпретатор классического Пролога PIE, либо правила помещать в текстовый файл, включенный в проект DLL и затем этот проект компилировать на лету и вызывать эту DLL (компилятор в VIP поставляется в виде отдельного приложения).
Спасибо, интересная мысль, надо попробовать, правда компилер надо будет всегда держать под рукой (а он тяжеловат, с дллками). А в будещих версиях сей трабл не пофиксят? не в курсе?
Ответить с цитированием
  (#11 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
По умолчанию 02.10.2006, 12:34

Цитата:
Ни в одной из версий Vip такой возможности нет.
В Vip для обеспечения такой возможности рекомендуется либо использовать поставляемый интерпретатор классического Пролога PIE, либо правила помещать в текстовый файл, включенный в проект DLL и затем этот проект компилировать на лету и вызывать эту DLL (компилятор в VIP поставляется в виде отдельного приложения).
Сорри еще один вопросик, насчет "компилятора в VIP поставляемого в виде отдельного приложения".
У меня установлен VIP7PE и в C:\Program Files\Visual Prolog 7.0\bin есть vip7compiler.exe и vip6link.exe - они разве не подойдут? И еще бы хотелось шаблончиков к make, наверняка параметров куча...
Ответить с цитированием
  (#12 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 02.10.2006, 17:07

Про обсуждаемый компилятор в VIP, который "поставляется в виде отдельного приложения".
Насколько я понимаю, это отдельное приложение, которое можно купить. В PE (и в CE) его нет.
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
TypucT TypucT вне форума
Member
 
Сообщений: 336
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2005
По умолчанию 03.10.2006, 15:38

Цитата:
Немножко неудачный пример. Здесь у тебя правило в виде факта. [...] Я имел ввиду правила вида P :- S,X,Y.
Отчего ж, можно использовать любой терм, никто не запрещает:
Код:
1 ?- read(X),assert(X).
|: hero(X):-tall(X).
X = hero(_G373):-tall(_G373);
No
2 ?- read(X),assert(X).
|: tall(giraffe).
X = tall(giraffe);
No
3 ?- hero(A).
A = giraffe;
No
Ответить с цитированием
  (#14 (permalink)) Старый
Kurt_Rassel Kurt_Rassel вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2006
Post 04.10.2006, 04:30

Цитата:
Отчего ж, можно использовать любой терм, никто не запрещает:
Код:
1 ?- read(X),assert(X).
|: hero(X):-tall(X).
X = hero(_G373):-tall(_G373);
No
2 ?- read(X),assert(X).
|: tall(giraffe).
X = tall(giraffe);
No
3 ?- hero(A).
A = giraffe;
No
И почему в VIPе такую возможность не сделали...
Ответить с цитированием
  (#15 (permalink)) Старый
VictorY VictorY вне форума
Member
 
Аватар для VictorY
 
Сообщений: 978
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 43 сообщениях
Регистрация: 10.02.2005
По умолчанию 07.10.2006, 18:46

На мой комментарий
Цитата:
Ни в одной из версий Vip такой возможности нет.
В Vip для обеспечения такой возможности рекомендуется либо использовать поставляемый интерпретатор классического Пролога PIE, либо правила помещать в текстовый файл, включенный в проект DLL и затем этот проект компилировать на лету и вызывать эту DLL (компилятор в VIP поставляется в виде отдельного приложения).
поступило несколько вопросов.
Цитата:
Спасибо, интересная мысль, надо попробовать, правда компилер надо будет всегда держать под рукой (а он тяжеловат, с дллками). А в будещих версиях сей трабл не пофиксят? не в курсе?
Цитата:
Про обсуждаемый компилятор в VIP, который "поставляется в виде отдельного приложения".
Насколько я понимаю, это отдельное приложение, которое можно купить. В PE (и в CE) его нет.
Цитата:
Сорри еще один вопросик, насчет "компилятора в VIP поставляемого в виде отдельного приложения".
У меня установлен VIP7PE и в C:\Program Files\Visual Prolog 7.0\bin есть vip7compiler.exe и vip6link.exe - они разве не подойдут? И еще бы хотелось шаблончиков к make, наверняка параметров куча...
Прошу прощения за то, что не сразу отвечаю, проблемы со связью. Не буду отвечать на каждый вопрос по отдельности, проясню ситуацию и технологию.
В профессиональную версию (и только в нее!) входит замечательное приложение BIN/vipBuilder.exe.
Он запускается с параметром vipBuilder.exe <полное имя PRJ проекта>. Этот билдер можно запускать как из BAT (CMD) файла, так и по правилам запуска приложений из VIP. В результате проект будет построен в соответствии с установками, установленными в самом проектном файле. По поводу возможности поставки VipBuilder заказчику вместе с Вашим проектом - я не помню сейчас условий лицензии, но в любом случае, если реально потребуется, можно обратиться в PDC за разрешением.
Ответить с цитированием
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правил вывода родственных отношений RuslanTM Prolog 2 16.12.2011 20:46
Загрузка фактов и правил из внешних файлов tumanovalex Prolog 2 01.10.2011 20:22
Запретить ввод более одной десятичной точки в форму ввода("некорректный ввод") adller PHP 1 14.01.2011 20:23
Использование рекурсивных правил Михаил_1987 Prolog 10 09.02.2009 17:23
Есть ли бесплатный хостинг без строгих правил? artishok Любые вопросы от новичков 24 08.09.2008 18:34
Ввод в StringGrid запрет как его поставить на ввод tysya Delphi 4 26.08.2008 17:04
Разработчик правил проектирования топологии (Product Engineer) 2000-2500$ youth Работа 0 24.07.2007 13:04
Ввод списка Anoen Prolog 2 27.03.2007 12:30
Как переключить пользователя? bartwell PHP 6 27.12.2006 13:59
Винитарху (большие объемы БД фактов и правил) LKS Prolog 5 13.05.2005 11:23
Ввод с клавиатуры artgonch Prolog 3 08.04.2005 12:53



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