This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/searching/bridge.lgt
pmoura 6855745dff updated to Logtalk 2.9.1
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@212 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2001-12-06 00:04:14 +00:00

73 lines
1.6 KiB
Plaintext

:- object(bridge,
instantiates(heuristic_state_space)).
:- uses(list).
:- uses(numberlist).
:- uses(set).
initial_state(start, ([], right, [1,3,6,8,12])).
goal_state(end, ([1,3,6,8,12], left, [])).
next_state((Left1, left, Right1), (Left2, right, Right2), Slower) :- % two persons
list::append(List, [Person1| Persons], Left1),
set::select(Person2, Persons, Others),
list::append(List, Others, Left2),
set::insert_all([Person1, Person2], Right1, Right2),
(Person1 > Person2 ->
Slower = Person1
;
Slower = Person2).
next_state((Left1, right, Right1), (Left2, left, Right2), Slower) :- % two persons
list::append(List, [Person1| Persons], Right1),
set::select(Person2, Persons, Others),
list::append(List, Others, Right2),
set::insert_all([Person1, Person2], Left1, Left2),
(Person1 > Person2 ->
Slower = Person1
;
Slower = Person2).
next_state((Left1, left, Right1), (Left2, right, Right2), Person) :- % one person
set::select(Person, Left1, Left2),
set::insert(Right1, Person, Right2).
next_state((Left1, right, Right1), (Left2, left, Right2), Person) :- % one person
set::select(Person, Right1, Right2),
set::insert(Left1, Person, Left2).
heuristic((Left, Lamp, Right), Heuristic) :-
Lamp = left ->
list::min(Left, Heuristic)
;
list::max(Right, Max),
list::min(Right, Min),
Heuristic is Max + Min.
print_state((Left, Lamp, Right)) :-
write_list(Left),
(Lamp = left ->
write(' lamp _|____________|_ ')
;
write(' _|____________|_ lamp ')),
write_list(Right),
nl.
write_list([]).
write_list([Head| Tail]) :-
write(Head), write(' '),
write_list(Tail).
:- end_object.