I have a problem in my code with a turbo prolog that searches all paths and the shortest path in a graph between two nodes. The problem I have is to check if the node is in the list or not (exactly in the member section)
1 ---- b ---- 3 --- | --- --- | ----- a |5 d --- | ----- --- | --- 2 --- | --- 4 -- c -- for example we have for b--->c ([b,c],5) , ([b,a,c],3) and ([b,d,c],7) : possible paths. ([b,a,c],3) : the shortest path.
and this is my code:
DOMAINS list=Symbol * PREDICATES distance(Symbol, Symbol) path1(Symbol, Symbol, list, integer) path(Symbol, Symbol,list, list, integer) distance(Symbol, list, integer) member(Symbol, list) shortest(Symbol, Symbol, list, integer) CLAUSES distance(a, b, 1). distance(a, c, 2). distance(b, d, 3). distance(c, d, 4). distance(b, c, 5). distance(b, a, 1). distance(c, a, 2). distance(d, b, 3). distance(d, c, 4). distance(c, b, 5). member(X, [X|T]). member(X, [Y|T]) :- member(X, T). absent(X, L) :- member(X, L), !, fail. absent(_, _). path1(X, Y, L, C) :- path(X, Y, L, I, C). path(X, X, [X], I, C) :- absent(X, I). path(X, Y, [X|R], I, C) :- distance(X, Z, A), absent(Z, I), path(Z, Y, R, [X|I], C1), C = C1 + A . shortest(X, Y, L, C) :- path(X, Y, L, C), path(X, Y, L1, C1), C < C1.