| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Prolog > Реализация динамической базы |
| Автор: Vovanuch 21.12.2006, 17:25 |
| Доброго времени суток. Подскажите кто-нить, плз. Надо создать базу, из которой берутся все вопросы (по порядку или в разброс) и в зависимости от ответа (y/n) выводить результат. Вот что написал: :- dynamic y/1, n/0. %база знаний a(1,'Не исправен мотор'). a(2,'Не исправен руль'). a(3,'Нет колеса'). a(4,'Нет педалей'). a(5,'купите лошадь!'). a(6,'все в порядке!'). b(1,'не заводится машина'). b(2,'не могу повернуть при езде'). b(3,'машина стоит косо и не едет'). b(4,'не нажимаются педали'). b(5,'ничего не работает'). go:- sprosit(X). sprosit(X):- b(X,Text),!,write('Верно ли утверждение: '), write(Text),write(' '),nl,read(Z),otvet(X,Z). otvet(M,Z):-Z='y',assert(y(M)). otvet(M,Z):-Z='n',assert(n(M)). Проблема в том, что команда "go."выводит только 1ю запись и прекращает работу. 181 ?- go. Верно ли утверждение: не заводится машина | y. Yes 182 ?- Как заставить выводить все вопросы? И как потом вывести комментарии к тем предложениям, на которые был получен ответ "y"? Заранее спасибо. |
| Автор: FunnyFalcon 21.12.2006, 17:56 |
| По-моему, зря отрезал (восклицательным знаком). sprosit:- b(X,Text),write('Верно ли утверждение: '), write(Text),write(' '),nl,read(Z),otvet(X,Z). otvet(M,'y'):-assert(y(M)). otvet(M,'n'):-assert(n(M)). |
| Автор: Vovanuch 21.12.2006, 18:44 |
| 1) "sprosit:-" - на это он ругается, т.к. надо описывать с аргументами. sprosit(Х):- и т.д. 2) Зачем влепил воскл. знак - сам не знаю. Но и без него не работает почему-то. 10 ?- go. Верно ли утверждение: не заводится машина |: y. Yes 11 ?- Это вот "Yes" говорит, что там еще есть что выводить, но почему он не идет на 2й просмотр икса? (Х=2)... ХЗ блин |
| Автор: Artemios 22.12.2006, 02:43 | ||
| [ Что-то странное, на каком Прологе делаешь? Я бы примерно так сделал:
|