1

I have created a simple graph search from an example

move(math101, math102).
move(math101, chem101).
move(math102, math210).
move(math102, phys102).
move(phys102, phys201).
move(math210, phys201).


search(A, A, [A]).

search(A, B, [A|Path]) :-
        move(A,C),
        search(C,B,Path).

I can tell you that to get to 'phys201' from 'math101' you need to pass through 'math102' and 'math210' or 'math102' and'phys102'

I am trying to prove this in prolog but its not working, I think it may have something to do with the query i am typing

search(math101,phys201,[math101])

Or is it something in my code, I have traced the path and it keeps binning out with a No result

The trace is

[1]CALL:  search(math101, phys201, [math101])
[1]FOUND: search(_4193470, _15353627, [_4193470|_14830180]):-move(_4193470, _8522358),            search(_8522358, _15353627, _14830180).
[1]BIND:  search(math101, phys201, [math101])
[2]CALL:  move(math101, _10259988)
[2]FOUND: move(math101, math102).
[2]BIND:  move(math101, math102)
[3]CALL:  search(math102, phys201, [])
[3]FAIL:  search(math102, phys201, [])
[2]REDO:  move(math101, math102)
[4]CALL:  move(math101, _10259988)
[4]FOUND: move(math101, chem101).
[4]BIND:  move(math101, chem101)
[5]CALL:  search(chem101, phys201, [])
[5]FAIL:  search(chem101, phys201, [])
[4]REDO:  move(math101, chem101)
[6]CALL:  move(math101, _10259988)
[6]FAIL:  move(math101, _10259988)
[1]REDO:  search(math101, phys201, [math101])

Please help

Sean Gray
  • 133
  • 2
  • 2
  • 8

1 Answers1

0

as you suppose, your query is the problem: try

?- search(math101,phys201,X).
X = [math101, math102, math210, phys201] ;
X = [math101, math102, phys102, phys201] ;
false.

or, with some more instantiated path

?- search(math101,phys201,[math101|X]).
X = [math102, math210, phys201] ;
X = [math102, phys102, phys201] ;
false.
CapelliC
  • 59,646
  • 5
  • 47
  • 90
  • That is absolutely brilliant, i cant thank you enough. I have been staring at my screen all day. Thank you – Sean Gray Nov 21 '14 at 18:00