;Example of Logic Programming (using Book's notation) ;Solving a maze ;Example maze ; START ;+----+ ----------+---------+ ;| 1 | 2 3 4 | 5 6 | ;| | | | ;| 7 | 8 9 | 10 | 11 +----+ ;| +---------+ | | | ;| 13 14 15 | 16 | 17 | 18 | ;+----+ | | | ;| 19 | 20 | 21 22 | 23 | 24 | ;| | +---------+ | | ;| 25 | 26 27 28 29 | 30 | ;| +---------- -----+ | ;| 31 32 33 34 35 36 | ;+----- --------------------+ ; FINISH ;Facts (assert (connect start 2)) (assert (connect 2 3)) (assert (connect 3 4)) (assert (connect 5 6)) (assert (connect 8 9)) (assert (connect 13 14)) (assert (connect 14 15)) (assert (connect 21 22)) (assert (connect 26 27)) (assert (connect 27 28)) (assert (connect 28 29)) (assert (connect 31 32)) (assert (connect 32 33)) (assert (connect 33 34)) (assert (connect 34 35)) (assert (connect 35 36)) (assert (connect 1 7)) (assert (connect 2 8)) (assert (connect 3 9)) (assert (connect 4 10)) (assert (connect 5 11)) (assert (connect 7 13)) (assert (connect 10 16)) (assert (connect 11 17)) (assert (connect 14 20)) (assert (connect 15 21)) (assert (connect 16 22)) (assert (connect 17 23)) (assert (connect 18 24)) (assert (connect 19 25)) (assert (connect 20 26)) (assert (connect 23 29)) (assert (connect 24 30)) (assert (connect 25 31)) (assert (connect 28 34)) (assert (connect 30 36)) (assert (connect 32 finish)) ;Rules (assert (rule (connected_to ?A ?B) (connect ?A ?B))) (assert (rule (connected_to ?A ?B) (connect ?B ?A))) (assert (rule (solve_maze ?Solution) (path (start) ?Solution))) (assert (rule (path (?CurrentLocation . ?RestOfPath) ?Solution) (and (connected_to ?CurrentLocation ?NextLocation) (not (member ?NextLocation ?RestOfPath)) (path (?NextLocation ?CurrentLocation . ?RestOfPath) ?Solution)))) (assert (rule (path (finish . ?RestOfPath) (finish . ?RestOfPath)))) (assert (rule (member ?x (?y . ?z)) (member ?x ?z))) (assert (rule (member ?x (?x . ?y)))) ;Query ;(solve_maze ?x) ;?x = (finish 32 33 ... 3 2 start)