Помогите пожалуста не получаеться запустить программу на Gnu Prolog (Пятнашки). Вот код(взят с книги Братко)
Код | after( [Empty | List], [Pnt | List1], 1) :- change( Empty, Pnt, List, List1). change( Ps, Pn, [Pn | Ls], [Ps | Ls] ) :- distance( Ps, Pn, 1).
change( Ps, Pn, [Pn1 | Ls], [Pn1 | Ls1] ) :- change( Ps, Pn, Ls, Ls1).
distance( X/Y, X1/Y1, Р) :- distance1( X, X1, Рх), distance1( Y, Y1, Ру), Р is Рх + Py.
distance1( А, В, Р) :- Р is А-В, Р >= 0, ! ; Р is B-A.
h( [ Empty | List], H) :- target( [Empty1 | Tglist] ), sumdist( List, Tglist, Р), order( List, Od), Н is Р + 3*Od.
sumdist( [ ], [ ], 0).
sumdist( [Pn | Ls], [Pn1 | Ls1], Р) :- distance( Pn, Pn1, Р1), sumdist( Ls, Cl, P2), Р is P1 + Р2.
order( [First | Ls], Od) :- order( [First | Ls], First, Od).
order( [Pn1, Pn2 | Ls], First, Od) :- points( Pn1, Pn2, Od1), order( [Pn2 | Ls], First, Od2), Od is Od1 + Od2.
order( [Last], First, Od) :- points( Last, First, Od).
points( 2/2, _, 1) :- !.
points( 1/3, 2/3, 0) :- !. points( 2/3, 3/3, 0) :- !.
points( 3/3, 3/2, 0) :- !.
points( 3/2, 3/1, 0) :- !.
points( 3/1, 2/1, 0) :- !.
points( 2/1, 1/1, 0) :- !.
points( 1/1, 1/2, 0) :- !.
points( 1/2, 1/3, 0) :- !.
points( _, _, 2).
target( [2/2, 1/3, 2/3, 3/3, 3/2, 3/1, 2/1, 1/1, 1/2] ).
start1( [2/2, 1/3, 3/2, 2/3, 3/3, 3/1, 2/1, 1/1, 1/2] ).
start2( [2/1, 1/2, 1/3, 3/3, 3/2, 3/1, 2/2, 1/1, 2/3] ). start3( [2/2, 2/3, 1/3, 3/1, 1/2, 2/1, 3/3, 1/1, 3/2] ). showresult( [ ]).
showresult( [ Pos | List]) :- showresult( List), nl, write( '---'), showpos( Pos).
showpos( [S0, S1, S2, S3, S4, S5, S6, S7, S8] ) :- member(Y, [3,2,1] ), nl, member(X, [1, 2, 3] ), member( Pnt-X/Y,[' '-S0, 1-S1, 2-S2, 3-S3, 4-S4, 5-S5, 6-S6, 7-S7, 8-S8]), write( Pnt), fail.
showpos( _ ).
|
|