Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Задание на Visual Prolog. Требуется помощь.


Автор: Leri 8.2.2010, 11:05
Задание такое:
 На перекрёстке произошло дорожно-транспортное происшествие, в котором участвовал автобус, грузовик, легковой автомобиль и маршрутное такси. Свидетели происшествия дали показания инспектору ГИБДД.
Первый свидетель считал, что первым на перекрёсток выехал автобус, а маршрутное такси было вторым. Другой свидетель полагал, что последним на перекрёсток выехал легковой автомобиль, а вторым был грузовик. Третий свидетель уверял, что автобус выехал на перекрёсток вторым, а следом за ним легковой автомобиль. В результате оказалось, что каждый свидетель был прав только в одном из своих утверждений.
В каком порядке выехали машины на перекрёсток?


В похожем задании посмотрела склепала:
Код

predicates
nondeterm avto(symbol)
nondeterm place(symbol)
nondeterm res(symbol,symbol)
nondeterm solution (symbol,symbol,symbol,symbol,symbol,symbol,symbol,symbol)
clauses
avto(bus).
avto(truck).
avto(car).
avto(taxi).
place(first).
place(second).
place(third).
place(fourth).

res(X,Y):- avto(X), X=bus, place(Y),Y=first, not(res(taxi,second)).
res(X,Y):- avto(X), X=car, place(Y),Y=fourth, not(res(truck,second)).
res(X,Y):- avto(X), X=bus, place(Y),Y=second, not(res(car,third)).

res(X,Y):- avto(X), X=taxi, place(Y),Y=second, not(res(bus,first)).
res(X,Y):- avto(X), X=truck, place(Y),Y=second, not(res(car,fourth)).
res(X,Y):- avto(X), X=car, place(Y),Y=third, not(res(bus,second)).

solution(X1,Y1,X2,Y2,X3,Y3,X4,Y4):-
         Y1=first, res(X1,Y1),
         Y2=second, res(X2,Y2),
         Y3=third, res(X3,Y3),
         Y4=fourth, res(X4,Y4),
         X1<>X2,X1<>X3,X1<>X4,
         X2<>X3,X2<>X4,X3<>X4.
goal solution(X1,Y1,X2,Y2,X3,Y3,X4,Y4).


Я ужасно запуталась в самом компиляторе (Visual Prolog 5.2.). Экзешник вроде сваяла, но не запускается. 
Проверьте пожалуйста, работает - нет? (Я тупица, да да =) )
Если работает, буду благодарна за присланный экзешник.)

(Правда вроде как он ругался, что переменные Х,У не используются... Вот тут я вообще не поняла, что не так.)

А если не работает... ( Тогда мне вдвойне помощь нужна.... Хэх... Скажите, что не так?

Автор: Грымзик 8.2.2010, 20:59
Вот работающая прога, выдает ответ в порядке следования машин.
Код

domains
slist=string*

predicates
nondeterm member(string,slist)
nondeterm avto(string)
nondeterm avtos(slist)
nondeterm res(slist,integer)
nondeterm solution (slist)

clauses
member(H,[H|_]).
member(H,[_|Tail]):-member(H,Tail).

avto(bus).
avto(truck).
avto(car).
avto(taxi).

avtos([]).
avtos([H|Tail]):-avtos(Tail),avto(H),not(member(H,Tail)).

res(L,1):-L=[bus,X,_,_], X<>"taxi".
res(L,1):-L=[X,taxi,_,_], X<>"bus".
res(L,2):-L=[_,X,_,car], X<>"truck".
res(L,2):-L=[_,truck,_,X], X<>"car".
res(L,3):-L=[_,bus,X,_], X<>"car".
res(L,3):-L=[_,X,car,_], X<>"bus".

solution(Ans):-
    Ans=[_,_,_,_],
    avtos(Ans),
    res(Ans,1),
    res(Ans,2),
    res(Ans,3).
    
goal solution(Ans).


Код

Ans=["bus","truck","car","taxi"]
1 Solution

Автор: Leri 9.2.2010, 14:21
Спасибо преогромное. Так, я точно не догадалась бы сделать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)