Пролог - путь и время путешествия - PullRequest
1 голос
/ 01 мая 2020

С учетом данных нам нужно найти путь и время путешествия.

byCar(auckland,Hamilton,103).
byCar(hamilton,raglan,42).

Это даст мне путь

    go(X,Y):- byCar(X,Y).
    travel(X,Y):- go(X,Y).
    travel(X,Y):- go(X,Z), travel(Z,Y).
    travel(X,Y,go(X,Y)):- go(X,Y).
    travel(X,Y,go(X,Z,Path)):- go(X,Z), travel(Z,Y,Path).

, если я включу время в качестве третьей функции и увеличьте ее как T = t + t

go(X,Y):-byCar(X,Y,t).
travel(X,Y,T):- go(X,Y),
travel(X,Y,T):- go(X,Z), travel(Z,Y), T is t+t.

Это все еще не дает мне времени.

Мой пример выполнения:

 ?. travel(auckland,raglan,Y).
    Y = go(auckland, hamilton, go(hamilton, raglan))

1 Ответ

1 голос
/ 01 мая 2020

t является константой в Прологе, так как она начинается со строчной буквы, что означает, что запросы, подобные byCar(X, Y, t)., не будут выполнены, если в фактах не используется t, но это не очень вероятно.

Вы должны использовать объединение, чтобы объединить время с переменной, например:

go(X, Y<b>, T</b>):-
    byCar(X, Y<b>, T</b>).

travel(X, X, 0).
travel(X, Y<b>, T</b>) :-
    go(X, Z<b>, T1</b>),
    travel(Z, Y<b>, T2</b>),
    T is T1 + T2.

или с аккумулятором:

go(X, Y<b>, T</b>):-
    byCar(X, Y<b>, T</b>).

travel(X, Y, T) :-
    travel(X, Y, 0, T).

travel(X, X, T, T).
travel(X, Y<b>, T1</b>, T4) :-
    go(X, Z<b>, T2</b>),
    T3 is T1 + T2,
    travel(Z, Y<b>, T3</b>, T4).

Обратите внимание, что в действительности вы следует написать hamilton с строчными буквами , в противном случае это переменная , что означает, что факт byCar(auckland,Hamilton,103). говорит о том, что auckland связан с all города, и каждый раз занимает 103 единицы времени:

byCar(auckland, <b>hamilton</b>, 103).
byCar(hamilton, raglan, 42).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...