Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача на Visual Prolog

440
10 ноября 2011 года
[FENIX]
83 / / 29.01.2007
Народ, помогите пожалуйста доделать лабораторную по Прологу.

Задание:

В одном театре работают четыре актёра: Смирнов, Снегов, Морев и Никитин. Один из них играет роль Отелло, другой – короля Лира, третий – Ромео, четвёртый – Гамлета. Смирнов – не Отелло и не Гамлет. Морев – не Ромео и не Отелло. Никитин – не Гамлет, не Отелло. Снегов не играет ни Гамлета, ни Ромео. Если Морев играет Гамлета, то Смирнов не играет короля Лира. Кто из актёров кого играет?

Код:
domains
actor=a(name,role)
actors=actor*
name,role=string

predicates
name(actor,name)
role(name,role)
in_actors(actor,actors)
notbutyes(actor,actor,actors)
solve

clauses
name(a(N,_),N).
%role(a(_,R),R).
role(N,R).

in_actors(A,[A,_,_,_]).
in_actors(A,[_,A,_,_]).
in_actors(A,[_,_,A,_]).
in_actors(A,[_,_,_,A]).

notbutyes(A,B,[A,B,_,_]).
notbutyes(A,B,[A,_,B,_]).
notbutyes(A,B,[A,_,_,B]).
notbutyes(A,B,[_,A,B,_]).
notbutyes(A,B,[B,A,_,_]).
notbutyes(A,B,[_,A,_,B]).
notbutyes(A,B,[_,_,A,B]).
notbutyes(A,B,[B,_,A,_]).
notbutyes(A,B,[_,B,A,_]).
notbutyes(A,B,[B,_,_,A]).
notbutyes(A,B,[_,B,_,A]).
notbutyes(A,B,[_,_,B,A]).

solve:-    in_actors(A1,Actors),name(A1,"Smirnov"), not(role("A1","Othello")),  not(role("A1","Gamlet")),
           in_actors(A2,Actors),name(A2,"Snegov"), not(role("A2","Romeo")), not(role("A2","Gamlet")),
           in_actors(A3,Actors),name(A3,"Morev"), not(role("A3","Othello")), not(role("A3","Romeo")),
           in_actors(A4,Actors),name(A4,"Nikitin"), not(role("A4","Othello")), not(role("A4","Gamlet")),  
           in_actors(A5,Actors),role("A5","Othello"),
           in_actors(A6,Actors),role("A6","Lir, the King"),
           in_actors(A7,Actors),role("A7","Romeo"),
           in_actors(A8,Actors),role("A8","Gamlet"),
           
           notbutyes(A9,A10,Actors),name(A9,"Morev"),name(A10,"Smirnov"),role("A9","Gamlet"),not(role("A10","Lir, the King")),
           write(Actors),nl,fail.
goal
solve.


Кое что я сделал, но почему то выдаёт "no" :(
23K
10 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
Прикольная задача у меня получился ответ:

smirnov (!otello, gamlet, lir) - romeo
snegov (! gamlet, romeo) - otello
morev (!romeo , otello) - gamlet
nikitin (!gamlet, otello) - lir
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог