НЕ могу понять, что за ошибка - Prolog
Формулировка задачи:
Есть программа:
Написана на Visual Prolog 5.2
И выдает такие ошибки (см. картнку)
Как исправить?
Помогите, уже в истерике сижу(((
Листинг программы
- domains
- i = integer
- s = o;x
- кубик = куб(s Left,s Right,s Up,s Down,s Front,s Back)
- клетка = кл(i X,i Y,s)
- коор = к(i X,i Y)
- поле = клетка*
- кооры = коор*
- траектория = string*
- facts
- single d(i X,i Y)
- predicates
- ход_кубика(string,кубик,кубик)
- создать(i,i,i,i,поле)
- пометить(поле,i,i,поле)
- заполнено(поле)
- ход(i,i,кубик,поле,траектория,траектория,кооры)
- цель(i,i,поле,i,i,i,i,i)
- nondeterm координаты(string,i,i,i,i,i,i,i,i)
- след(string,траектория)
- nondeterm обратно(string,i,i,i,i,i,i,i,i)
- nondeterm вбок(string,i,i,i,i,i,i,i,i)
- goal
- write("Ширина поля:"),readint(L), write("Высота поля:"),readint(W),
- assert(d(L,W)),создать(1,L,1,W,P),пометить(P,1,1,P1),
- ход(1,1,куб(o,o,o,x,o,o),P1,[],Траектория,Координаты),
- write(Траектория,"\n",Координаты),exit.
- clauses
- d(255,255).
- ход_кубика("вперёд",куб(L,R,U,D,F,B),куб(L,R,B,F,U,D)):- not(B=x).
- ход_кубика("назад",куб(L,R,U,D,F,B),куб(L,R,F,B,D,U)):- not(F=x).
- ход_кубика("вправо",куб(L,R,U,D,F,B),куб(D,U,L,R,F,B)):- not(L=x).
- ход_кубика("влево",куб(L,R,U,D,F,B),куб(U,D,R,L,F,B)):- not(R=x).
- создать(L,L,W,W,[кл(L,W,o)]):-!.
- создать(L,L,Y,W,[кл(L,Y,o)|P]):-Y1=Y+1,!,создать(1,L,Y1,W,P).
- создать(X,L,Y,W,[кл(X,Y,o)|P]):-X1=X+1,!,создать(X1,L,Y,W,P).
- пометить([кл(X,Y,_)|P],X,Y,[кл(X,Y,x)|P]):-!.
- пометить([Кл|P],X,Y,[Кл|P1]):-пометить(P,X,Y,P1).
- заполнено([кл(_,_,x)|P]):-заполнено(P).
- заполнено([]).
- ход(_,_,_,P,_,[],[]):-заполнено(P),!.
- ход(X,Y,Куб,P,Т,[Н|Траек],[к(X1,Y1)|Коор]):- d(L,W),D=L+W, цель(X,Y,P,D,L,W,X0,Y0),
- координаты(Н,X,Y,X0,Y0,L,W,X1,Y1), not(след(Н,Т)),
- ход_кубика(Н,Куб,Куб1), пометить(P,X1,Y1,P1),!,
- ход(X1,Y1,Куб1,P1,[Н|Т],Траек,Коор).
- ход(X,Y,Куб,P,Т,[Н|Траек],[к(X1,Y1)|Коор]):- d(L,W),D=L+W, цель(X,Y,P,D,L,W,X0,Y0),
- координаты(Н,X,Y,X0,Y0,L,W,X1,Y1),
- ход_кубика(Н,Куб,Куб1), пометить(P,X1,Y1,P1),!,
- ход(X1,Y1,Куб1,P1,[Н|Т],Траек,Коор).
- ход(X,Y,Куб,P,Т,[Н1,Н2|Траек],[к(X2,Y2),к(X3,Y3)|Коор]):- d(L,W),D=L+W, цель(X,Y,P,D,L,W,X0,Y0),
- обратно(Н1,X,Y,L,W,X0,Y0,X2,Y2),
- ход_кубика(Н1,Куб,Куб1), пометить(P,X2,Y2,P1),
- вбок(Н2,X2,Y2,L,W,X0,Y0,X3,Y3),
- ход_кубика(Н2,Куб1,Куб2), пометить(P1,X3,Y3,P2),!,
- ход(X3,Y3,Куб2,P2,[Н2,Н1|Т],Траек,Коор).
- цель(X,Y,[кл(X1,Y1,o)|P],D,_,_,X0,Y0):- D1=abs(X-X1)+abs(Y-Y1),D>D1,!,
- цель(X,Y,P,D1,X1,Y1,X0,Y0).
- цель(X,Y,[_|P],D,X1,Y1,X0,Y0):- цель(X,Y,P,D,X1,Y1,X0,Y0).
- цель(_,_,[],_,X0,Y0,X0,Y0).
- обратно("назад",X,Y,_,_,_,Y0,X,Y1):- Y0>Y,Y1=Y-1,Y1>=1.
- обратно("вперёд",X,Y,_,W,_,Y0,X,Y1):- Y0<Y,Y1=Y+1,Y1<=W.
- обратно("влево",X,Y,_,_,X0,_,X1,Y):- X0>X,X1=X-1,X1>=1.
- обратно("вправо",X,Y,L,_,X0,_,X1,Y):- X0<X,X1=X+1,X1<=L.
- вбок("вправо",X,Y,L,_,_,Y0,X1,Y):- Y0<>Y,X1=X+1,X1<=L.
- вбок("влево",X,Y,_,_,_,Y0,X1,Y):- Y0<>Y,X1=X-1,X1>=1.
- вбок("вперёд",X,Y,_,W,X0,_,X,Y1):- X0<>X,Y1=Y+1,Y1<=W.
- вбок("назад",X,Y,_,_,X0,_,X,Y1):- X0<>X,Y1=Y-1,Y1>=1.
- координаты("вперёд",X,Y,_,Y0,_,W,X,Y1):- Y0>Y,Y1=Y+1,Y1<=W.
- координаты("назад",X,Y,_,Y0,_,_,X,Y1):- Y0<Y,Y1=Y-1,Y1>=1.
- координаты("вправо",X,Y,X0,_,L,_,X1,Y):- X0>X,X1=X+1,X1<=L.
- координаты("влево",X,Y,X0,_,_,_,X1,Y):- X0<X,X1=X-1,X1>=1.
- след("вперёд",["назад"|_]).
- след("назад",["вперёд"|_]).
- след("вправо",["влево"|_]).
- след("влево",["вправо"|_]).
Решение задачи: «НЕ могу понять, что за ошибка»
textual
Листинг программы
- facts - d
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д