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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 02:05   #1
qip2005
Пользователь
 
Регистрация: 14.09.2008
Сообщений: 61
По умолчанию Prolog

Доброго времени суток.
Ребята, такая задача - есть нерегулируемый перекресток, на нем встречаются 3 авто и нужно решить кто за кем должен проехать. Вот пытаюсь реализовать хотя бы для двух авто и хочу чтобы для ситуации когда никто никого не должен пропускать выводились все возможные комбинации их движения. То есть если два навстречу двигающихся авто на перекрестке никуда не поворачивают а двигаются прямо, то вывести нечто вроде : "1-м проезжает - 1-й автомобиль, 2-м проезжает - 2-й автомобиль; 1-м проезжает -2-й автомобиль, 2-м проезжает - 1-й автомобиль;"

Вот код который получился:

Код:
predicates 
ts_v_rukave1(string) 
ts_v_rukave2(string) 
napravo(string) 
nalevo(string)
pryamo(string) 
proedet_pervym(string) 
proedet_vtorym(string) 
poryadok_proezda(string, string) 
razyezd_na_perekrestke(string, string, string, string, string, string) 
clauses 
ts_v_rukave1(X1) :- razyezd_na_perekrestke(X1,_,_,_,_,_) . 
ts_v_rukave2(X2) :- razyezd_na_perekrestke(_,_,X2,_,_,_) . 

napravo(X1) :- razyezd_na_perekrestke(X1,"napravo",_,_,_,_) . 
napravo(X2) :- razyezd_na_perekrestke(_,_,X2,"napravo",_,_). 

nalevo(X1) :- razyezd_na_perekrestke(X1,"nalevo",_,_,_,_) . 
nalevo(X2) :- razyezd_na_perekrestke(_,_,X2,"nalevo",_,_) . 

pryamo(X1) :-  razyezd_na_perekrestke(X1,"pryamo",_,_,_,_) . 
pryamo(X2) :-  razyezd_na_perekrestke(_,_,X2,"pryamo",_,_) . 

proedet_pervym(X1) :- 	ts_v_rukave1(X1), ts_v_rukave2(X2), napravo(X1), nalevo(X2); 
			ts_v_rukave1(X1), ts_v_rukave2(X2), pryamo(X1), nalevo(X2); 
			ts_v_rukave1(X1), ts_v_rukave2(X2), pryamo(X1), pryamo(X2); 
			ts_v_rukave1(X1), ts_v_rukave2(X2), napravo(X1), pryamo(X2), !.
proedet_pervym(X2) :- 	ts_v_rukave1(X1), ts_v_rukave2(X2), pryamo(X1), pryamo(X2), !.

proedet_vtorym(X2) :- 	ts_v_rukave1(X1), ts_v_rukave2(X2), napravo(X1), nalevo(X2); 
			ts_v_rukave1(X1), ts_v_rukave2(X2), pryamo(X1), nalevo(X2); 
			ts_v_rukave1(X1), ts_v_rukave2(X2), pryamo(X1), pryamo(X2); 
			ts_v_rukave1(X1), ts_v_rukave2(X2), napravo(X1), pryamo(X2), !.
proedet_vtorym(X1) :- 	ts_v_rukave1(X1), ts_v_rukave2(X2), pryamo(X1), pryamo(X2), !.

poryadok_proezda(X1,X2) :- X1=X2, write("Pervy "), write ("| Vtoroy "), nl, proedet_pervym(X1), proedet_vtorym(X2),!. 
razyezd_na_perekrestke ("auto_1", "pryamo", "auto_2", "pryamo", "", "") . 
goal 
poryadok_proezda(X1,X2) .
Но ее результат включает в себя вариант "1-м проезжает - 1-й автомобиль, 2-м проезжает - 1-й автомобиль; 1-м проезжает -2-й автомобиль, 2-м проезжает - 2-й автомобиль;".

Хелп плиз. Настолько он непонятный этот ПРОЛОГ, что я уже сдался...
qip2005 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog ankatito Помощь студентам 6 13.11.2011 20:53
Prolog SeRhy Помощь студентам 0 13.11.2010 17:10
Prolog Darck Angel Софт 0 17.01.2010 20:32
Prolog Debro Помощь студентам 2 26.12.2009 10:16
Prolog @Katushka@ Помощь студентам 0 03.10.2009 22:44