root/trunk/examples/searching/bridge.lgt

Revision 4601, 1.8 KB (checked in by pmoura, 7 weeks ago)

Added svn:mime-type property to source files (set to text/x-logtalk).

  • Property svn:mime-type set to text/x-logtalk
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(bridge,
3    instantiates(heuristic_state_space)).
4
5
6    :- info([
7        version is 1.1,
8        author is 'Paulo Moura',
9        date is 2004/8/15,
10        comment is 'Bridge puzzle.']).
11
12
13    :- uses(list, [append/3]).
14    :- uses(numberlist, [min/2, max/2]).
15    :- uses(set, [insert/3, insert_all/3, select/3]).
16   
17
18    initial_state(start, ([], right, [1,3,6,8,12])).
19
20
21    goal_state(end, ([1,3,6,8,12], left, [])).
22
23
24    next_state((Left1, left, Right1), (Left2, right, Right2), Slower) :-    % two persons
25        append(List, [Person1| Persons], Left1),
26        select(Person2, Persons, Others),
27        append(List, Others, Left2),
28        insert_all([Person1, Person2], Right1, Right2),
29        (Person1 > Person2 ->
30            Slower = Person1
31            ;
32            Slower = Person2).
33
34    next_state((Left1, right, Right1), (Left2, left, Right2), Slower) :-    % two persons
35        append(List, [Person1| Persons], Right1),
36        select(Person2, Persons, Others),
37        append(List, Others, Right2),
38        insert_all([Person1, Person2], Left1, Left2),
39        (Person1 > Person2 ->
40            Slower = Person1
41            ;
42            Slower = Person2).
43
44    next_state((Left1, left, Right1), (Left2, right, Right2), Person) :-    % one person
45        select(Person, Left1, Left2),
46        insert(Right1, Person, Right2).
47       
48    next_state((Left1, right, Right1), (Left2, left, Right2), Person) :-    % one person
49        select(Person, Right1, Right2),
50        insert(Left1, Person, Left2).
51
52
53    heuristic((Left, Lamp, Right), Heuristic) :-
54        Lamp = left ->
55            list::min(Left, Heuristic)
56            ;
57            list::max(Right, Max),
58            list::min(Right, Min),
59            Heuristic is Max + Min.
60
61
62    print_state((Left, Lamp, Right)) :-
63        write_list(Left),
64        (Lamp = left ->
65            write(' lamp _|____________|_ ')
66            ;
67            write(' _|____________|_ lamp ')),
68        write_list(Right),
69        nl.
70
71
72    write_list([]).
73   
74    write_list([Head| Tail]) :-
75        write(Head), write(' '),
76        write_list(Tail).
77
78
79:- end_object.
Note: See TracBrowser for help on using the browser.