Wednesday, May 13, 2020

Prolog. задача о путешествии

есть перечень населенных пунктов, которые связаны определенным видом транспорта. требуется получить подробный путь из пункта А в пункт Б , если такое путешествие возможно
pass(auckland, hamilton, bus).
pass(bangkok, auckland, plane).
pass(frankfurt, bangkok, plane).
pass(frankfurt, singapore, plane).
pass(hamilton, raglan, bus).
pass(losAngeles, auckland, plane).
pass(metz, frankfurt, train).
pass(metz, paris, train).
pass(paris, losAngeles, plane).
pass(saarbruecken, frankfurt, train).
pass(saarbruecken, paris, train).
pass(valmont, metz, bus).
pass(valmont, saarbruecken, bus).

travel(X,Y) :-
  pass(X, Y, T) -> 
    write([T, X, Y]), ! , nl ;
  pass(X, Z, T1) ,
  pass(Z, Y, T2) -> 
    write([T1, X, Z, T2, Z, Y]), !, nl ;
  pass(X, Z1, T1) ,
  pass(Z1, Z2, T2) ,
  pass(Z2, Y, T3) -> 
    write([T1, X, Z1, T2, Z1, Z2, T3, Z2, Y]), !, nl ;
  pass(X, Z1,  T1) ,
  pass(Z1, Z2,  T2) ,
  pass(Z2, Z3, T3) ,
  pass(Z3, Y,  T4) -> 
    write([T1, X, Z1, T2, Z1, Z2, T3, Z2, Z3, T4, Z3, Y]), !, nl .

No comments: