Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2014, 13:39   #1
Ikimura
Новичок
Джуниор
 
Регистрация: 08.02.2014
Сообщений: 3
Восклицание Prolog и 4 игрока в домино

Доброго времени суток всем.
В общем есть такая лаба.
Четыре человека играют в домино. Их фамилии Кузнецов, Токарев, Слесарев и Резчиков. Профессия каждого игрока соответствует фамилии одного из других игроков.
1. Напротив Кузнецова сидит слесарь.
2. Напротив Резчикова сидит резчик.
3. Справа от Слесарева сидит токарь.
4. Кто сидит слева от кузнеца?
В Прологе полный 0, никогда раньше не сталкивался, выручайте.
Visual Prolog 5.2
Кое-что набросал, а как дальше быть...?
Код:
predicates

  lastName(symbol)
  profession(symbol)
  opposite(symbol, symbol)
  seatByRight(symbol, symbol)
  seatByLeft(symbol, symbol)

clauses

  lastName(X):- X=kuznecov; X=tokarev; X=slesarev; X=rezchikov.
  profession(Y):- Y=kuznec; Y=tokar; Y=slesar; Y=rezchik.
  opposite(kuznecov,slesar).
  opposite(rezchikov,rezchik).
  seatByRight(slesarev,tokar).
  
goal
Ikimura вне форума Ответить с цитированием
Старый 10.02.2014, 20:09   #2
Ikimura
Новичок
Джуниор
 
Регистрация: 08.02.2014
Сообщений: 3
По умолчанию

Ну хоть что-нибудь, ребят! мысль хотя бы подкиньте.
Ikimura вне форума Ответить с цитированием
Старый 10.02.2014, 20:19   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну какую мысль.
У тебя есть 4 профессии, есть 4 игрока. Всех их описываешь в БД:
prof(rezc, "Rezc").
и т.д.
твое правило должно набрать список из 4 таких пар

Код:
solve:-
prof(Prof1, Name1), prof(Prof2, Name2), ...
Засовываешь это все в списки:
Код:
Profs = [Prof1, Prof2, Prof3, Prof4]
Names = ...
И над списками выполняешь нужные проверки.

Если тчо-то не подходит - то проверка завершается неудачей и машина логического вывода сама ищет другое решение (формируя другие варианты списков).

эта задача точно так и решается.
Если что-то не понятно - посмотри тут: http://pro-prof.com/archives/1299
Тут описано как решать более подробно и есть примеры (см. раздел "Задачи на установление соответствия").
rrrFer вне форума Ответить с цитированием
Старый 11.02.2014, 11:34   #4
Ikimura
Новичок
Джуниор
 
Регистрация: 08.02.2014
Сообщений: 3
По умолчанию

Проблема в том, что я в синтаксисе полный 0, это первое задание и никаких вводных по синтаксису не было. Я даже готовое решение не могу исправить, которое нашел.
Код:
DOMAINS
man=m(string,string)
men=man*
slist=string*

predicates

naprotiv(string,string,slist)
sprava(string,string,slist)
sleva(string,string,slist)
find(string)
member(man,men)

clauses

member(H,[H|_]).
member(H,[_|Tail]):-member(H,Tail).
 
naprotiv(A,B,[_,A,_,B]).
naprotiv(B,A,[A,_,B,_]).
naprotiv(B,A,[_,A,_,B]).
 
sprava(A,B,[A,B,_,_]).
sprava(A,B,[_,_,A,B]).
 
sleva(A,B,L):-sprava(B,A,L).
 
find(Ans):-L=[m(A,_),m(B,_),m(C,_),m(D,_)],Surnames=[A,B,C,D],
    member(m("kuznecov",_),L),member(m("tokarev",_),L),
    member(m("slesarev",_),L),member(m("rezchikov",_),L),
    member(m(S1,"kuznec"),L),not(S1="kuznecov"),
    member(m(S2,"tokar"),L),not(S2="tokarev"),
    member(m(S3,"slesar"),L),not(S3="slesarev"),
    member(m(S4,"rezchik"),L),
    naprotiv("kuznecov",S3,Surnames),
    sprava("slesarev",S2,Surnames),
        naprotiv("rezchikov",S4,Surnames),
    sleva(Ans,S1,Surnames).
goal
find(Ans).
visual prolog 5.2
W;domino.pro, pos: 1223, 420 Unused variable: Ans
W;domino.pro, pos: 725, 709 Two free variables in expression
E;domino.pro, pos: 725, 718 The domain refers to global non-reference domains
Ikimura вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как организовать систему столкновений игрока с неправильными объектами? alextrof94 Общие вопросы Delphi 3 01.08.2013 23:37
Как добавить в игру 2го игрока? X_Madi Общие вопросы Delphi 3 28.04.2013 09:33
Pascal. Игра. 2 игрока, вычеркивают клеточки, последний проигрывает. loktor Помощь студентам 0 16.12.2012 02:49
Нужна игра в которой 2 игрока играют по сетке Ellita Софт 4 03.01.2009 20:37
нападение игрока alex@x Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 22.12.2007 12:35