Скачиваний:
11
Добавлен:
01.05.2014
Размер:
90.11 Кб
Скачать

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ «ЛЭТИ»

Кафедра МОЭВМ

ОТЧЕТ

по дисциплине «Логическое программирование»

по лабораторным работам №1 – 3

Выполнил:

Кожемяко К.Н.

Группа

6341

Преподаватель:

Беляев С. А.

Санкт-Петербург

2008

Моделирование объекта, жизни и толпы.

  1. Реализовать объект с не меньше чем 5 свойствами, определить их изменение.

  2. Реализовать жизнь одного объекта

  3. Реализовать жизнь толпы (не меньше чем 3 объектов)

Выбранный объект: Скалолаз.

У него есть имя(номер N), координаты нахождения на карте по оси X и оси Y, уровень сил STR, запас пищи FD, а так же направление H (1 - вверх, 0 – вниз). Скалолаз двигается по вертикали (вверх или вниз в зависимости от направления, кратчайшим путём до вершины, или подножья горы), если ему позволяют запас сил и географические особенности. При движении по вертикали он имеет шанс:

- Попасть на труднопроходимый участок 48% (-7 к уровню сил)

- Соскользнуть 2% (Умереть)

- Ничего не встретить 50%

Поднявшись на вершину, и спустившись к подножью, скалолаз пополняет свои запасы сил и пищи. Умерев, скалолаз возрождается у подножья горы с полными запасами сил и пищи. Чтобы подняться или спуститься на уровень скалолаз тратит силы в зависимости от его местоположения (Y*2+9). Если подъём невозможен по карте, скалолаз тратит ход на смещение на позицию, позволяющую этот подъём совершить. За один ход скалолаз не может сделать более одного смещения. Если подъём невозможен из-за недостатка сил, скалолаз пропускает ход, пополняя запасы сил. (-5 к запасам пищи, +35 к уровню сил) Поднявшись на вершину, скалолаз начинает спускаться. Спускаясь скалолаз имеет 30% шанс сместиться в лево, 30% в право и 60% шанс спуститься без отклонения. (Отклонения происходят только если это возможно «по карте») Скалолаз умирает, когда его уровень сил STR или запас пищи FD становится неположительным.

Приоритет команды

- Командой считается объединение скалолазов, скалолазов и команды или двух команд, находящихся в 1 момент времени в одном и том же месте.

- Команда двигается в одну сторону

- Если кому-то из объектов толпы необходимо восстановить силы, остальные пропускают ход, восстанавливая тем самым силы (+3 к уровню сил)

- Умирая, скалолаз исключается из команды.

- Если в команде осталось менее 2 скалолазов, команда перестаёт существовать.

Предлагаемый алгоритм:

del(X, [X | L], L).

del(X, [Y | L], [Y | R]) :- del(X, L, R).

off:- add(1, 100, 100, 1, 11, 6), add(2, 100, 100, 1, 11, 6), add(3, 100, 100, 1, 11, 6), add(4, 10, 100, 1, 5, 5), add(5, 100, 100, 1, 5, 5), add(6, 3, -1, 1, 3, 3), add(7, 100, 100, 1, 3, 3), add(8, 100, 100, 1, 13, 3), add(9, 10, 100, 1, 21, 5), add(10, 100, -1, 1, 22, 3).

prepare:- assertz(clteam([e, e, e, e, e])), assertz(climber(e, e, e, e, e, e)), assertz(tmallA([e])), assertz(tmallB([e])).

length([], 0).

length([X|L], N) :- length(L, M), N is M+1.

not(Goal):-Goal,!,fail;true.

conc([], L, L).

conc([Head | Tail], L, [Head | NewTail]) :- conc(Tail, L, NewTail).

member(X, [X|T]).

member(X, [H|T]) :- member(X, T).

pr(Elem, Elem).

add(N, STR, FD, H, X, Y) :- assertz(climber(N, STR, FD, H, X, Y)).

gotm:- readytm(TmList), tmGo(TmList).

gocl:- readycl(ClList), clGo(ClList).

start(N):- (N>0, analiz, gocl, gotm, N1 is N-1, start(N1); nl).

start:- analiz, gocl, gotm, start.

readytm(TmList):- pr(TmList, [e]).

tmGo(TmList) :- (

tmallA(E), climber(N, STR, FD, H, X, Y), member(N, E), not(member(N, TmList)),

conc([N], TmList, TmList1), STR>=Y*2+9, goT(N, STR, FD, H, X, Y), tmGo(TmList1);

tmallA(E), climber(N, STR, FD, H, X, Y), member(N, E), not(member(N, TmList)),

conc([N], TmList, TmList1), goT(N, STR, FD, H, X, Y), tmGo(TmList1);

nl).

readycl(ClList):- pr(ClList, [e]).

clGo(ClList) :- (

climber(N, STR, FD, H, X, Y), not(member(N, ClList)),

tmallA(E), not(member(N, E)),

goA(N, STR, FD, H, X, Y), conc([N], ClList, ClList1), clGo(ClList1);

nl).

clcl:- tmallA(E), climber(N1, STR1, FD1, H1, X1, Y1), climber(N2, STR2, FD2, H2, X2, Y2), not(member(N1, E)), not(member(N2, E)), N1\=N2, X1==X2, Y1==Y2, H1==H2,

pr(TmListAN, [N1]), conc([N2], TmListAN, TmListANN), asserta(clteam(TmListANN)), conc(E, TmListANN, E1), retract(tmallA(E)), assertz(tmallA(E1)), write('New team!').

tmcl:- tmallA(E), climber(N1, STR1, FD1, H1, X1, Y1), clteam([Head | Tail]),

not(member(N1, E)), climber(Head, STR2, FD2, H2, X2, Y2),

X1==X2, Y1==Y2, H1==H2, conc([N1], [Head | Tail], TmListA), retract(clteam([Head | Tail])), asserta(clteam(TmListA)), conc(E, [N1], E1), retract(tmallA(E)), asserta(tmallA(E1)),

write('New member of team -'), write(N1).

tmtm:- clteam([Head1 | Tail1]), clteam([Head2 | Tail2]), Head1\=Head2,

climber(Head1, STR1, FD1, H1, X1, Y1), climber(Head2, STR2, FD2, H2, X2, Y2), X1==X2, Y1==Y2, H1==H2,

conc([Head1 | Tail1], [Head2 | Tail2], TmListA),

retract(clteam([Head1 | Tail1])), retract(clteam([Head2 | Tail2])), asserta(clteam(TmListA)),

write('Consolidation of teams').

analiz :- (

clcl, nl, analiz;

tmcl, nl, analiz;

tmtm, nl, analiz;

clteam(TmListA), length(TmListA, P), P<2, pr(TmListA, [Head | Tail]), tmallA(E), del(Head, E, E1), retract(tmallA(E)), asserta(tmallA(E1)), retract(clteam(TmListA)), nl, analiz;

nl).

goA(N, STR, FD, H, X, Y) :-

(FD<0, write('climber - '), write(N), nl, write('No food, no strage.'), nl, unluck(N, STR, FD, H, X, Y);

STR<0, write('climber - '), write(N), nl, write('No strange.'), nl, unluck(N, STR, FD, H, X, Y);

STR<Y*2+9, write('climber - '), write(N), nl, write('Eating...'), nl, eat(N, STR, FD, H, X, Y);

STR>=Y*2+9, write('climber - '), write(N), nl, write('Step'), nl, nextA(N, STR, FD, H, X, Y)).

something(N, STR, FD, H, X, Y) :- random(E), Z is E*100,

(Z=<2, write('Fall!'), nl, fall(N, STR, FD, H, X, Y);

Z>2, Z=<50, write('Hard impediment.'), nl, impediment(N, STR, FD, H, X, Y);

Z>50).

unluck(N, STR, FD, H, X, Y) :- retract(climber(N, STR, FD, H, X, Y)), H1 is 1, STR1 is 100, FD1 is 100, X1 is 0, Y1 is 0, H1 is 1, asserta(climber(N, STR1, FD1, H1, X1, Y1)).

impediment(N, STR, FD, H, X, Y) :- STR1 is STR-3, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR1, FD, H, X, Y)).

eat(N, STR, FD, H, X, Y) :- FD1 is FD-5, STR1 is STR+35, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR1, FD1, H, X, Y)).

nextA(N, STR, FD, H, X, Y) :-

(Y==13, change(N, STR, FD, H, X, Y);

Y==0, change(N, STR, FD, H, X, Y);

H==1, Y\=13, Y\=0, nextCH(N, STR, FD, H, X, Y);

H==0, Y\=13, Y\=0, nextCH(N, STR, FD, H, X, Y)).

change(N, STR, FD, H, X, Y) :- Y==13, H is 1, write('On the top!'), nl, H1 is 0, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR, FD, H1, X, Y)), nextCH(N, STR, FD, H1, X, Y).

change(N, STR, FD, H, X, Y) :- Y==0, H is 0, write('Down of the hill.'), nl, H1 is 1, STR1 is 100, FD1 is 100, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR1, FD1, H1, X, Y)), nextCH(N, STR1, FD1, H1, X, Y).

change(N, STR, FD, H, X, Y) :- nextCH(N, STR, FD, H, X, Y).

nextCH(N, STR, FD, H, X, Y) :- (H==1, Y+1=<X, Y+1=<26-X, nextUA(N, STR, FD, H, X, Y);

H==1, Y+1>X, nextUR(N, STR, FD, H, X, Y);

H==1, Y+1>26-X, nextUL(N, STR, FD, H, X, Y);

H==0, nextD(N, STR, FD, H, X, Y)).

nextUA(N, STR, FD, H, X, Y) :- STR1 is STR-(Y*2+9), Y1 is Y+1, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR1, FD, H, X, Y1)), something(N, STR1, FD, H, X, Y1).

nextUR(N, STR, FD, H, X, Y) :- X1 is X+1, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR, FD, H, X1, Y)), write('Deflection to the right.'), nl.

nextUL(N, STR, FD, H, X, Y) :- X1 is X-1, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR, FD, H, X1, Y)), write('Deflection to the left.'), nl.

nextD(N, STR, FD, H, X, Y) :- random(E), Z is E*100, (Z=<30, Y\=13, write('Deflection to the right.'), nl, downR(N, STR, FD, H, X, Y);

Z>30, Y\=13, Z=<60, write('Deflection to the left.'), nl, downL(N, STR, FD, H, X, Y);

write('Nothing.'), nl, down(N, STR, FD, H, X, Y)).

down(N, STR, FD, H, X, Y) :- STR1 is STR-(Y*2+9), Y1 is Y-1, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR1, FD, H, X, Y1)), something(N, STR1, FD, H, X, Y1).

downL(N, STR, FD, H, X, Y) :- X1 is X-1, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR, FD, H, X1, Y)).

downR(N, STR, FD, H, X, Y) :- X1 is X+1, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR, FD, H, X1, Y)).

fall(N, STR, FD, H, X, Y) :- (

clteam(TmListA), member(N, TmListA), del(N, TmListA, TmList1), retract(clteam(TmListA)), asserta(clteam(TmList1)), tmallA(E), del(N, E, E1), retract(tmallA(E)), asserta(tmallA(E1)),

retract(climber(N, STR, FD, H, X, Y)), H1 is 1, STR1 is 100, FD1 is 100, X1 is 0, Y1 is 0, asserta(climber(N, STR1, FD1, H1, X1, Y1));

retract(climber(N, STR, FD, H, X, Y)), H1 is 1, STR1 is 100, FD1 is 100, X1 is 0, Y1 is 0, asserta(climber(N, STR1, FD1, H1, X1, Y1))).

goT(N, STR, FD, H, X, Y) :-

(FD<0, write('climber - '), write(N), nl, write('No food, no strage in team.'), nl, unluckT(N, STR, FD, H, X, Y);

STR<0, write('climber - '), write(N), nl, write('No strange in team.'), nl, unluckT(N, STR, FD, H, X, Y);

STR>=Y*2+9, clteam(TmList), member(N,TmList), climber(N3, STR3, FD3, H3, X3, Y3), member(N3, TmList), STR3<Y*2+9, write('climber - '), write(N), nl, write('Waiting... in team'), nl, wait(N, STR, FD, H, X, Y);

STR<Y*2+9, write('climber - '), write(N), nl, write('Eating... in team'), nl, eat(N, STR, FD, H, X, Y);

STR>=Y*2+9, write('climber - '), write(N), nl, write('Step in team'), nl, nextA(N, STR, FD, H, X, Y)).

unluckT(N, STR, FD, H, X, Y) :- clteam(TmList), del(N, TmList, TmList1), retract(clteam(TmList)), asserta(clteam(TmList1)), retract(climber(N, STR, FD, H, X, Y)), H1 is 1, STR1 is 100, FD1 is 100, X1 is 0, Y1 is 0, H1 is 1,

asserta(climber(N, STR1, FD1, H1, X1, Y1)), tmallA(E), del(N, E, E1), retract(tmallA(E)), asserta(tmallA(E1)).

wait(N, STR, FD, H, X, Y) :- STR1 is STR+3, retract(climber(N, STR, FD, H, X, Y)), asserta(climber(N, STR1, FD, H, X, Y)).

Для проверки реализации введём в точку A(6,7) двух скалолазов вынужденных смещаться вправо и один из которых имеет отрицательный запас пищи, в точку B(4,5) двух скалолазов вынужденных смещаться в право и один из которых вынужден пополнять запас сил , в точку C(1,2,3) трёх скалолазов имеющих все условия для подъёма в гору, в точку D(8) одного скалолаза имеющего все условия для подъёма в гору, в точку E(9) скалолаза вынужденного смещаться влево и в точку F(10) скалолаза вынужденного смещаться влево и не имеющего сил для подъёма. Проследим их действия за ход.

| ?- prepare.

yes

| ?- off.

yes

| ?- start(1).

New team!

New team!

New team!

New member of team -3

climber - 8

Step

Fall!

climber - 9

Eating...

climber - 10

Eating...

climber - 1

Step in team

climber - 2

Step in team

Hard impediment.

climber - 3

Step in team

climber - 5

Waiting... in team

climber - 7

Waiting... in team

climber - 4

Eating... in team

climber - 6

No food, no strage in team.

Как и ожидалось, математическая модель удовлетворяют условиям задачи.

Проследим детально реализацией хода скалолаза с начальными данными Имя -1, Силы – 100, Запас пищи – 100, направление – Вверх, X – 6, Y – 3, единственного на горе:

| ?- prepare.

yes

| ?- add(1, 100, 100, 1, 6, 3).

yes

| ?- trace.

The debugger will first creep -- showing everything (trace)

yes

{trace}

| ?- start(1).

1 1 Call: start(1) ?

2 2 Call: 1>0 ?

2 2 Exit: 1>0 ?

3 2 Call: analiz ?

4 3 Call: clcl ?

5 4 Call: tmallA(_144) ?

5 4 Exit: tmallA([e]) ?

6 4 Call: climber(_182,_138,_139,_183,_184,_185) ?

6 4 Exit: climber(e,e,e,e,e,e) ?

7 4 Call: climber(_223,_179,_180,_224,_225,_226) ?

7 4 Exit: climber(e,e,e,e,e,e) ?

8 4 Call: not(member(e,[e])) ?

9 5 Call: '$call'(member(e,[e]),not,1,true) ?

10 6 Call: member(e,[e]) ?

10 6 Exit: member(e,[e]) ?

9 5 Exit: '$call'(member(e,[e]),not,1,true) ?

11 5 Call: fail ?

11 5 Fail: fail ?

8 4 Fail: not(member(e,[e])) ?

7 4 Redo: climber(e,e,e,e,e,e) ?

7 4 Exit: climber(1,100,100,1,6,3) ?

8 4 Call: not(member(e,[e])) ?

9 5 Call: '$call'(member(e,[e]),not,1,true) ?

10 6 Call: member(e,[e]) ?

10 6 Exit: member(e,[e]) ?

9 5 Exit: '$call'(member(e,[e]),not,1,true) ?

11 5 Call: fail ?

11 5 Fail: fail ?

8 4 Fail: not(member(e,[e])) ?

6 4 Redo: climber(e,e,e,e,e,e) ?

6 4 Exit: climber(1,100,100,1,6,3) ?

7 4 Call: climber(_223,_179,_180,_224,_225,_226) ?

7 4 Exit: climber(e,e,e,e,e,e) ?

8 4 Call: not(member(1,[e])) ?

9 5 Call: '$call'(member(1,[e]),not,1,true) ?

10 6 Call: member(1,[e]) ?

10 6 Fail: member(1,[e]) ?

9 5 Fail: '$call'(member(1,[e]),not,1,true) ?

8 4 Exit: not(member(1,[e])) ?

9 4 Call: not(member(e,[e])) ?

10 5 Call: '$call'(member(e,[e]),not,1,true) ?

11 6 Call: member(e,[e]) ?

11 6 Exit: member(e,[e]) ?

10 5 Exit: '$call'(member(e,[e]),not,1,true) ?

12 5 Call: fail ?

12 5 Fail: fail ?

9 4 Fail: not(member(e,[e])) ?

7 4 Redo: climber(e,e,e,e,e,e) ?

7 4 Exit: climber(1,100,100,1,6,3) ?

8 4 Call: not(member(1,[e])) ?

9 5 Call: '$call'(member(1,[e]),not,1,true) ?

10 6 Call: member(1,[e]) ?

10 6 Fail: member(1,[e]) ?

9 5 Fail: '$call'(member(1,[e]),not,1,true) ?

8 4 Exit: not(member(1,[e])) ?

9 4 Call: not(member(1,[e])) ?

10 5 Call: '$call'(member(1,[e]),not,1,true) ?

11 6 Call: member(1,[e]) ?

11 6 Fail: member(1,[e]) ?

10 5 Fail: '$call'(member(1,[e]),not,1,true) ?

9 4 Exit: not(member(1,[e])) ?

10 4 Call: 1\=1 ?

11 5 Call: 1=1 ?

11 5 Exit: 1=1 ?

10 4 Fail: 1\=1 ?

4 3 Fail: clcl ?

4 3 Call: tmcl ?

5 4 Call: tmallA(_144) ?

5 4 Exit: tmallA([e]) ?

6 4 Call: climber(_182,_138,_139,_183,_184,_185) ?

6 4 Exit: climber(e,e,e,e,e,e) ?

7 4 Call: clteam([_179|_180]) ?

7 4 Exit: clteam([e,e,e,e,e]) ?

8 4 Call: not(member(e,[e])) ?

9 5 Call: '$call'(member(e,[e]),not,1,true) ?

10 6 Call: member(e,[e]) ?

10 6 Exit: member(e,[e]) ?

9 5 Exit: '$call'(member(e,[e]),not,1,true) ?

11 5 Call: fail ?

11 5 Fail: fail ?

8 4 Fail: not(member(e,[e])) ?

6 4 Redo: climber(e,e,e,e,e,e) ?

6 4 Exit: climber(1,100,100,1,6,3) ?

7 4 Call: clteam([_179|_180]) ?

7 4 Exit: clteam([e,e,e,e,e]) ?

8 4 Call: not(member(1,[e])) ?

9 5 Call: '$call'(member(1,[e]),not,1,true) ?

10 6 Call: member(1,[e]) ?

10 6 Fail: member(1,[e]) ?

9 5 Fail: '$call'(member(1,[e]),not,1,true) ?

8 4 Exit: not(member(1,[e])) ?

9 4 Call: climber(e,_247,_248,_291,_292,_293) ?

9 4 Exit: climber(e,e,e,e,e,e) ?

10 4 Call: 6==e ?

10 4 Fail: 6==e ?

4 3 Fail: tmcl ?

4 3 Call: tmtm ?

5 4 Call: clteam([_107|_108]) ?

5 4 Exit: clteam([e,e,e,e,e]) ?

6 4 Call: clteam([_148|_149]) ?

6 4 Exit: clteam([e,e,e,e,e]) ?

7 4 Call: e\=e ?

8 5 Call: e=e ?

8 5 Exit: e=e ?

7 4 Fail: e\=e ?

4 3 Fail: tmtm ?

4 3 Call: clteam(_123) ?

4 3 Exit: clteam([e,e,e,e,e]) ?

5 3 Call: length([e,e,e,e,e],_163) ?

5 3 Exit: length([e,e,e,e,e],5) ?

6 3 Call: 5<2 ?

6 3 Fail: 5<2 ?

4 3 Call: nl ?

4 3 Exit: nl ?

3 2 Exit: analiz ?

5 2 Call: gocl ?

6 3 Call: readycl(_167) ?

7 4 Call: pr(_193,[e]) ?

7 4 Exit: pr([e],[e]) ?

6 3 Exit: readycl([e]) ?

8 3 Call: clGo([e]) ?

9 4 Call: climber(_246,_247,_248,_249,_250,_251) ?

9 4 Exit: climber(e,e,e,e,e,e) ?

10 4 Call: not(member(e,[e])) ?

11 5 Call: '$call'(member(e,[e]),not,1,true) ?

12 6 Call: member(e,[e]) ?

12 6 Exit: member(e,[e]) ?

11 5 Exit: '$call'(member(e,[e]),not,1,true) ?

13 5 Call: fail ?

13 5 Fail: fail ?

10 4 Fail: not(member(e,[e])) ?

9 4 Redo: climber(e,e,e,e,e,e) ?

9 4 Exit: climber(1,100,100,1,6,3) ?

10 4 Call: not(member(1,[e])) ?

11 5 Call: '$call'(member(1,[e]),not,1,true) ?

12 6 Call: member(1,[e]) ?

12 6 Fail: member(1,[e]) ?

11 5 Fail: '$call'(member(1,[e]),not,1,true) ?

10 4 Exit: not(member(1,[e])) ?

11 4 Call: tmallA(_307) ?

11 4 Exit: tmallA([e]) ?

12 4 Call: not(member(1,[e])) ?

13 5 Call: '$call'(member(1,[e]),not,1,true) ?

14 6 Call: member(1,[e]) ?

14 6 Fail: member(1,[e]) ?

13 5 Fail: '$call'(member(1,[e]),not,1,true) ?

12 4 Exit: not(member(1,[e])) ?

13 4 Call: goA(1,100,100,1,6,3) ?

14 5 Call: 100<0 ?

14 5 Fail: 100<0 ?

14 5 Call: 100<0 ?

14 5 Fail: 100<0 ?

14 5 Call: 100<3*2+9 ?

14 5 Fail: 100<3*2+9 ?

14 5 Call: 100>=3*2+9 ?

14 5 Exit: 100>=3*2+9 ?

15 5 Call: write('climber - ') ?

climber -

15 5 Exit: write('climber - ') ?

16 5 Call: write(1) ?

1

16 5 Exit: write(1) ?

17 5 Call: nl ?

17 5 Exit: nl ?

18 5 Call: write('Step') ?

Step

18 5 Exit: write('Step') ?

19 5 Call: nl ?

19 5 Exit: nl ?

20 5 Call: nextA(1,100,100,1,6,3) ?

21 6 Call: 3==13 ?

21 6 Fail: 3==13 ?

21 6 Call: 3==0 ?

21 6 Fail: 3==0 ?

21 6 Call: 1==1 ?

21 6 Exit: 1==1 ?

22 6 Call: 3\=13 ?

23 7 Call: 3=13 ?

23 7 Fail: 3=13 ?

22 6 Exit: 3\=13 ?

23 6 Call: 3\=0 ?

24 7 Call: 3=0 ?

24 7 Fail: 3=0 ?

23 6 Exit: 3\=0 ?

24 6 Call: nextCH(1,100,100,1,6,3) ?

25 7 Call: 1==1 ?

25 7 Exit: 1==1 ?

26 7 Call: 3+1=<6 ?

26 7 Exit: 3+1=<6 ?

27 7 Call: 3+1=<26-6 ?

27 7 Exit: 3+1=<26-6 ?

28 7 Call: nextUA(1,100,100,1,6,3) ?

29 8 Call: _799 is 100-(3*2+9) ?

29 8 Exit: 85 is 100-(3*2+9) ?

30 8 Call: _827 is 3+1 ?

30 8 Exit: 4 is 3+1 ?

31 8 Call: retract(climber(1,100,100,1,6,3)) ?

31 8 Exit: retract(climber(1,100,100,1,6,3)) ?

32 8 Call: asserta(climber(1,85,100,1,6,4)) ?

32 8 Exit: asserta(climber(1,85,100,1,6,4)) ?

33 8 Call: something(1,85,100,1,6,4) ?

34 9 Call: random(_951) ?

34 9 Exit: random(0.001251220703125) ?

35 9 Call: _981 is 0.001251220703125*100 ?

35 9 Exit: 0.1251220703125 is 0.001251220703125*100 ?

36 9 Call: 0.1251220703125=<2 ?

36 9 Exit: 0.1251220703125=<2 ?

37 9 Call: write('Fall!') ?

Fall!

37 9 Exit: write('Fall!') ?

38 9 Call: nl ?

38 9 Exit: nl ?

39 9 Call: fall(1,85,100,1,6,4) ?

40 10 Call: clteam(_1106) ?

40 10 Exit: clteam([e,e,e,e,e]) ?

41 10 Call: member(1,[e,e,e,e,e]) ?

41 10 Fail: member(1,[e,e,e,e,e]) ?

40 10 Call: retract(climber(1,85,100,1,6,4)) ?

40 10 Exit: retract(climber(1,85,100,1,6,4)) ?

41 10 Call: _1148 is 1 ?

41 10 Exit: 1 is 1 ?

42 10 Call: _1173 is 100 ?

42 10 Exit: 100 is 100 ?

43 10 Call: _1198 is 100 ?

43 10 Exit: 100 is 100 ?

44 10 Call: _1223 is 0 ?

44 10 Exit: 0 is 0 ?

45 10 Call: _1248 is 0 ?

45 10 Exit: 0 is 0 ?

46 10 Call: asserta(climber(1,100,100,1,0,0)) ?

46 10 Exit: asserta(climber(1,100,100,1,0,0)) ?

39 9 Exit: fall(1,85,100,1,6,4) ?

33 8 Exit: something(1,85,100,1,6,4) ?

28 7 Exit: nextUA(1,100,100,1,6,3) ?

24 6 Exit: nextCH(1,100,100,1,6,3) ?

20 5 Exit: nextA(1,100,100,1,6,3) ?

13 4 Exit: goA(1,100,100,1,6,3) ?

47 4 Call: conc([1],[e],_1313) ?

48 5 Call: conc([],[e],_1300) ?

48 5 Exit: conc([],[e],[e]) ?

47 4 Exit: conc([1],[e],[1,e]) ?

49 4 Call: clGo([1,e]) ?

50 5 Call: climber(_1393,_1394,_1395,_1396,_1397,_1398) ?

50 5 Exit: climber(1,100,100,1,0,0) ?

51 5 Call: not(member(1,[1,e])) ?

52 6 Call: '$call'(member(1,[1,e]),not,1,true) ?

53 7 Call: member(1,[1,e]) ?

53 7 Exit: member(1,[1,e]) ?

52 6 Exit: '$call'(member(1,[1,e]),not,1,true) ?

54 6 Call: fail ?

54 6 Fail: fail ?

51 5 Fail: not(member(1,[1,e])) ?

50 5 Redo: climber(1,100,100,1,0,0) ?

50 5 Exit: climber(e,e,e,e,e,e) ?

51 5 Call: not(member(e,[1,e])) ?

52 6 Call: '$call'(member(e,[1,e]),not,1,true) ?

53 7 Call: member(e,[1,e]) ?

53 7 Exit: member(e,[1,e]) ?

52 6 Exit: '$call'(member(e,[1,e]),not,1,true) ?

54 6 Call: fail ?

54 6 Fail: fail ?

51 5 Fail: not(member(e,[1,e])) ?

50 5 Call: nl ?

50 5 Exit: nl ?

49 4 Exit: clGo([1,e]) ?

8 3 Exit: clGo([e]) ?

5 2 Exit: gocl ?

51 2 Call: gotm ?

52 3 Call: readytm(_1434) ?

53 4 Call: pr(_1460,[e]) ?

53 4 Exit: pr([e],[e]) ?

52 3 Exit: readytm([e]) ?

54 3 Call: tmGo([e]) ?

55 4 Call: tmallA(_1508) ?

55 4 Exit: tmallA([e]) ?

56 4 Call: climber(_1544,_1545,_1546,_1547,_1548,_1549) ?

56 4 Exit: climber(1,100,100,1,0,0) ?

57 4 Call: member(1,[e]) ?

57 4 Fail: member(1,[e]) ?

56 4 Redo: climber(1,100,100,1,0,0) ?

56 4 Exit: climber(e,e,e,e,e,e) ?

57 4 Call: member(e,[e]) ?

57 4 Exit: member(e,[e]) ?

58 4 Call: not(member(e,[e])) ?

59 5 Call: '$call'(member(e,[e]),not,1,true) ?

60 6 Call: member(e,[e]) ?

60 6 Exit: member(e,[e]) ?

59 5 Exit: '$call'(member(e,[e]),not,1,true) ?

61 5 Call: fail ?

61 5 Fail: fail ?

58 4 Fail: not(member(e,[e])) ?

57 4 Redo: member(e,[e]) ?

57 4 Fail: member(e,[e]) ?

55 4 Call: tmallA(_1508) ?

55 4 Exit: tmallA([e]) ?

56 4 Call: climber(_1544,_1545,_1546,_1547,_1548,_1549) ?

56 4 Exit: climber(1,100,100,1,0,0) ?

57 4 Call: member(1,[e]) ?

57 4 Fail: member(1,[e]) ?

56 4 Redo: climber(1,100,100,1,0,0) ?

56 4 Exit: climber(e,e,e,e,e,e) ?

57 4 Call: member(e,[e]) ?

57 4 Exit: member(e,[e]) ?

58 4 Call: not(member(e,[e])) ?

59 5 Call: '$call'(member(e,[e]),not,1,true) ?

60 6 Call: member(e,[e]) ?

60 6 Exit: member(e,[e]) ?

59 5 Exit: '$call'(member(e,[e]),not,1,true) ?

61 5 Call: fail ?

61 5 Fail: fail ?

58 4 Fail: not(member(e,[e])) ?

57 4 Redo: member(e,[e]) ?

57 4 Fail: member(e,[e]) ?

55 4 Call: nl ?

55 4 Exit: nl ?

54 3 Exit: tmGo([e]) ?

51 2 Exit: gotm ?

56 2 Call: _1536 is 1-1 ?

56 2 Exit: 0 is 1-1 ?

57 2 Call: start(0) ?

58 3 Call: 0>0 ?

58 3 Fail: 0>0 ?

58 3 Call: nl ?

58 3 Exit: nl ?

57 2 Exit: start(0) ?

1 1 Exit: start(1) ?

true ?

(31 ms) yes

{trace}

| ?-

Соседние файлы в папке Курсовая работа по прологу