Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация динамической базы 
V
    Опции темы
Vovanuch
Дата 21.12.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.2.2006

Репутация: нет
Всего: нет



Доброго времени суток.
Подскажите кто-нить, плз.  Надо создать базу, из которой берутся все вопросы (по порядку или в разброс) и в зависимости от ответа (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"?
Заранее спасибо.
PM MAIL   Вверх
FunnyFalcon
Дата 21.12.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 27.3.2006

Репутация: нет
Всего: 7



По-моему, зря отрезал (восклицательным знаком).

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)).

Это сообщение отредактировал(а) FunnyFalcon - 21.12.2006, 18:06
PM MAIL   Вверх
Vovanuch
Дата 21.12.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.2.2006

Репутация: нет
Всего: нет



1) "sprosit:-"  -  на это он ругается, т.к. надо описывать с аргументами.    
sprosit(Х):-
  и т.д.
2) Зачем влепил воскл. знак - сам не знаю. Но  и без него не работает почему-то.

10 ?- go.
Верно ли утверждение: не заводится машина   
|: y.

Yes
11 ?- 

Это вот "Yes" говорит, что там еще есть что выводить, но почему он не идет на 2й просмотр икса? (Х=2)... ХЗ блин smile
PM MAIL   Вверх
Artemios
Дата 22.12.2006, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 6
Всего: 50



[
Цитата(Vovanuch @  21.12.2006,  18:44 Найти цитируемый пост)
на это он ругается, т.к. надо описывать с аргументами.

Что-то странное, на каком Прологе делаешь?
Я бы примерно так сделал:
Код

otvet(M,'y'):-assert(y(M)).
otvet(M,'n'):-assert(n(M)).

ay(A,B):- a(A,B),y(A).

sprosit:-
    b(X,Text),
    write('Верно ли утверждение: '),
    write(Text),write('   '),nl,
    read(Z),
    otvet(X,Z),
    write('Продолжить?'),
    read(Next),
    Next='y',!, sprosit;
    findall(Q,ay(N,Q),YList),
    write('Комментарии к положительным ответам: '), write(YList),nl.



Это сообщение отредактировал(а) Artemios - 22.12.2006, 03:17


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Artemios
Дата 22.12.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 6
Всего: 50



Цитата(Vovanuch @  21.12.2006,  18:44 Найти цитируемый пост)
"sprosit:-"  -  на это он ругается, т.к. надо описывать с аргументами. 

Цитата(Artemios @  22.12.2006,  02:43 Найти цитируемый пост)
Что-то странное, на каком Прологе делаешь?


Упс... Возможно, на твоем Прологе вместо "sprosit" нужно "sprosit()" использовать.




--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.