#
#
#

from phidias.Types import *
from phidias.Lib import *
from phidias.Main import *

class link(Belief): pass
class path(Procedure): pass
class select_next(Procedure): pass

#
def_vars('Src', 'Dest', 'Next', 'Cost', 'NextTemp', 'CostTemp')

path(Src,Dest) >> [ select_next(Src, Dest) ]

select_next(Dest, Dest) >> [ show_line('Arrivo al nodo ', Dest) ]

select_next(Src, Dest) / link(Src, Next, Cost) >> \
	[
		show_line('Nodo ', Src),
		select_next(Src, Dest, Next, Cost)
	]

select_next(Src, Dest, NextTemp, CostTemp) / (link(Src, Next, Cost) & lt(Cost, CostTemp)) >> \
	[ select_next(Src, Dest, Next, Cost) ]
select_next(Src, Dest, NextTemp, CostTemp) >> \
	[ select_next(NextTemp, Dest) ]
#

PHIDIAS.assert_belief(link('A', 'B', 2))
PHIDIAS.assert_belief(link('A', 'C', 3))
PHIDIAS.assert_belief(link('A', 'D', 1))

PHIDIAS.assert_belief(link('B', 'C', 2))
PHIDIAS.assert_belief(link('B', 'F', 1))

PHIDIAS.assert_belief(link('C', 'F', 1))
PHIDIAS.assert_belief(link('C', 'G', 2))
PHIDIAS.assert_belief(link('C', 'E', 3))

PHIDIAS.assert_belief(link('D', 'C', 2))
PHIDIAS.assert_belief(link('D', 'E', 3))

PHIDIAS.assert_belief(link('E', 'G', 3))

PHIDIAS.assert_belief(link('F', 'G', 2))

PHIDIAS.run()
PHIDIAS.shell(globals())

