На перекрёстке произошло дорожно-транспортное происшествие, в котором участвовал автобус, грузовик, легковой автомобиль и маршрутное такси. Свидетели происшествия дали показания инспектору ГИБДД.
Первый свидетель считал, что первым на перекрёсток выехал автобус, а маршрутное такси было вторым. Другой свидетель полагал, что последним на перекрёсток выехал легковой автомобиль, а вторым был грузовик. Третий свидетель уверял, что автобус выехал на перекрёсток вторым, а следом за ним легковой автомобиль. В результате оказалось, что каждый свидетель был прав только в одном из своих утверждений.
В каком порядке выехали машины на перекрёсток?
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
|