У меня есть база данных, полная фактов, таких как:
checkpoint(checkpoint1,checkpoint2,2).
checkpoint(checkpoint2,checkpoint3,3).
checkpoint(checkpoint3,checkpoint4,4).
checkpoint(checkpoint4,checkpoint5,2).
checkpoint(checkpoint5,checkpoint6,2).
например, контрольная точка (первая контрольная точка, вторая контрольная точка, время в минутах).
Тогда следующее правило проверяет, возможно ли путешествие между двумя контрольными точками в гонке:
journey(X,Y):- checkpoint(X,_,_), checkpoint(_,Y,_),!; checkpoint(Y,_,_), checkpoint(_,X,_),!.
journey(X,Y):- checkpoint(X,Z,_), journey(Z,Y).
journey(X,Y):- checkpoint(Z2,Y,_), journey(X,Z2).
Обратите внимание, что вы не можете пропустить контрольные точки, вы можете добраться до контрольной точки4, сначала перейдя к 1,2, а затем к 3. Однако вы можете вернуться назад, например, с контрольной точки 4 обратно на 3.
Я понимаю, что этот код проверяет, возможно ли путешествие между двумя контрольными точками, если существует промежуточная контрольная точка между X и Y, которая в данном случае является Z. Однако я не совсем понимаю, что делает Z2. Я предполагаю, что он просто используется в качестве другого промежуточного звена, такого как Z, но почему он назван другой переменной? Разве нельзя изменить Z2 на Z, и он все равно будет работать?