Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Моделирование объекта - студенты

.doc
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
105.98 Кб
Скачать

Министерство высшего и среднего образования РФ

Санкт-Петербургский государственный

электротехнический университет

им. В.И.Ульянова (Ленина)

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

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

Отчет по лабораторной работе №3

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

Беляев С.А.

Выполнили студенты группы 3341:

Худяков Я.Д.

Белов Д. А.

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

2005

Постановка задачи:

Описать жизнь студентов, учащихся в ЛЭТИ. Они могут учится, сидеть в кафе, тусоваться, работать и находится дома.

Анализ задачи:

Алкоголик характеризуется следующими свойствами:

  • Имя

  • Опыт

  • Наличие определенной суммы денег

  • Настроением

  • Местоположением

Жизнь студента заключается в том, что он перемещается от места к месту, совершая действия в соответствии со своим положением и возможностями.

Выбор направления перехода осуществляется так: если у студента плохое настроение он идёт домой. Если оно хорошее, то студент идёт туда где больше всего народу в данный момент. Если он уже в этом месте, то он осуществляет произвольный переход. Если он находится в универе, то он начинает учится, тем самым повышая опыт и уменьшая настроение. В кафе он тратит деньги и повышает настроение, на работе зарабатывает деньги и теряет настроение. Дома он повышает настроение и плучает немного денег(на карманные расходы от родителей). На тусовке повышается настроение и тратятся деньги.

Ввод студентов осуществляется из файла ‘students’

Текст программы

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Реализация студента

%

% Студент характеризуется:

% - именем;

% - местонахождением (учёба, кафе, тусовка, дома, работа);

% - наличием определенной суммы денег;

% - курсом;

% - настроением;

%

%

% Каждый студент по имени индивидуален.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Начальные данные

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%places(5).

%places(1,Univer).

%places(2,Cafe).

%places(3,Tysa).

%places(4,Home).

%places(5,Work).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Работа с объектом

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Добавление студента

new_stud(Name,Opyt,Money,Nastr,Place) :-

asserta(stud(Name,Opyt,Money,Nastr,Place)).

%Изменение динамических характеристик студента

set_stud(Name,Opyt,Money,Nastr,Place) :-

retract(stud(Name,_,_,_,_) ),

asserta(stud(Name,Opyt,Money,Nastr,Place) ).

%Чтение характеристик студента

get_stud(Name,Opyt,Money,Nastr,Place) :-

stud(Name,Opyt,Money,Nastr,Place).

%Изменение денег

set_stud_money(Name,Money):-

stud(Name,Opyt,_,Nastr,Place),

retract(stud(Name,_,_,_,_)),

asserta(stud(Name,Opyt,Money,Nastr,Place)).

%Чтение денег

get_stud_money(Name,Money):-

stud(Name,_,Money,_,_).

%Изменение местонахождения

set_stud_place(Name,Place) :-

stud(Name,Opyt,Money,Nastr,_),

retract(stud(Name,_,_,_,_)),

asserta(stud(Name,Opyt,Money,Nastr,Place)).

%Чтение местонахождения

get_stud_place(Name,Place) :-

stud(Name,_,_,_,Place).

%Изменение настроения

set_stud_nastr(Name,Nastr):-

stud(Name,Opyt,Money,_,Place),

retract(stud(Name,_,_,_,_)),

asserta(stud(Name,Opyt,Money,Nastr,Place)).

%Чтение настроения

get_stud_nastr(Name,Nastr):-

stud(Name,_,_,Nastr,_).

%Изменение опыта

set_stud_Opyt(Name,Opyt):-

stud(Name,_,Money,Nastr,Place),

retract(stud(Name,_,_,_,_)),

asserta(stud(Name,Opyt,Money,Nastr,Place)).

%Чтение опыта

get_stud_Opyt(Name,Opyt):-

stud(Name,Opyt,_,_,_).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%

%

% - местонахождение (вначале задается случайно, потом изменяется в случайном направлении в зависимости от коллег);

% - наличие определенной суммы денег (вначале задается случайно, потом изменяется в зависимости от зарабатывания\траты);

% - настроение (вначале максимальное, потом изменяется в зависимости от наличия денег, и положения);

% - опыт (вначале 0, потом меняется в зависимости от учёбы);

%

%

% - имя (задается)

%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

live(D):-

nl,write('All studs'),

write_2line,

write_all_stud,

write_2line,

randomize,

asserta(count(1,0)),

asserta(count(2,0)),

asserta(count(3,0)),

asserta(count(4,0)),

asserta(count(5,0)),

findall(Name,stud(Name,_,_,_,_),ListName),

live_studs(D,ListName),!.

rest :-

retract(count(1,_)),

retract(count(2,_)),

retract(count(3,_)),

retract(count(4,_)),

retract(count(5,_)),

asserta(count(1,0)),

asserta(count(2,0)),

asserta(count(3,0)),

asserta(count(4,0)),

asserta(count(5,0)).

live_studs(0,_) :-!.

live_studs(D,ListName) :-

rest,

D>0,

D1 is D,

nl,write(D1),write(' Days'),

write_2line,

find_favorite_place(ListName),

% popular(P,PP),

% nl,nl,write(P),nl,nl,

all_go_somewhere(ListName),

all_do_something(ListName),

write_line,

write_2line,

NewD is D - 1,

live_studs(NewD,ListName),!.

all_go_somewhere([Head|[]]) :-

move(Head).

all_go_somewhere([Head|Tail]) :-

move(Head),

all_go_somewhere(Tail),!.

find_f([]). %поиcк популярного местонахождения

find_f([Head|Tail]) :-

get_stud_place(Head,Place),

count(Place,X),

X1 is X + 1,

retract(count(Place,_)),

asserta(count(Place,X1)),

find_f(Tail).

find_f2 :-

count(2,X2),

popular(C,B),

(X2>B,

(retract(popular(C,B)), asserta(popular(2,X2)))

);

count(3,X3),

popular(CC,BB),

(X3>BB,

(retract(popular(CC,BB)), asserta(popular(3,X3)))

);

count(4,X4),

popular(CCC,BBB),

(X4>BBB,

(retract(popular(CCC,BBB)), asserta(popular(4,X4)))

);

count(5,X5),

popular(CCCC,BBBB),

(X5>BBBB,

(retract(popular(CCCC,BBBB)), asserta(popular(5,X5)))

);

nl.

find_favorite_place(ListName) :-

find_f(ListName),

count(1,PP),

asserta(popular(1,PP)),

find_f2.

move(Name) :-

get_stud_place(Name,Place),

get_stud_nastr(Name,Nastr),

popular(P,_),

(Nastr<5,

(set_stud_place(Name,4)) % идём домой если плохое настроение

);

(P\=Place,

(set_stud_place(Name,P)) % идём в популрное место,

);

(P=Place,

(random(1,6,PP), set_stud_place(Name,PP)) %идём в произвольном направлении если мы в популярном месте

);

nl.

do(Head,1):-

get_stud_Opyt(Head,Opyt),

Opyt1 is Opyt + 100,

set_stud_Opyt(Head,Opyt1),

get_stud_nastr(Head,Nastr),

Nastr1 is Nastr*0.9,

set_stud_nastr(Head,Nastr1).

do(Head,2):-

get_stud_nastr(Head,Nastr),

Nastr1 is Nastr*1.1,

set_stud_nastr(Head,Nastr1),

get_stud_money(Head,Money),

Money1 is Money*0.9,

set_stud_money(Head,Money1).

do(Head,3):-

get_stud_nastr(Head,Nastr),

Nastr1 is Nastr*1.4,

set_stud_nastr(Head,Nastr1),

get_stud_money(Head,Money),

Money1 is Money*0.8,

set_stud_money(Head,Money1).

do(Head,4):-

get_stud_nastr(Head,Nastr),

Nastr1 is Nastr*1.2,

set_stud_nastr(Head,Nastr1),

get_stud_money(Head,Money),

Money1 is Money*1.05,

set_stud_money(Head,Money1).

do(Head,5):-

get_stud_nastr(Head,Nastr),

Nastr1 is Nastr*0.9,

set_stud_nastr(Head,Nastr1),

get_stud_money(Head,Money),

Money1 is Money*1.4,

set_stud_money(Head,Money1).

all_do_something([]) :-

!.

all_do_something([Head|Tail]) :-

get_stud_place(Head,Place),

do(Head,Place),

write_line,

all_do_something(Tail),!.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%

% Вывод информации на экран

%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

write_2line :-

nl,write('======================================================================================'),nl.

write_line :-

nl,write('--------------------------------------------------------------------------------------'),nl.

write_all_stud :-

write_2line,

findall(Name,stud(Name,_,_,_,_),ListName),

write_stud_list(ListName),

write_2line,!.

write_stud(Name) :-

write_line,

stud(Name,Opyt,Money,Nastr,Place),

write(Name), nl,

write(' Opyt = '), write(Opyt), write(' Money = ' ), write(Money), nl,

write(' Nastr = '), write(Nastr), write(' Place = '), write(Place), nl,

write_line.

write_stud_list([Head|[]]) :-

write_stud(Head).

write_stud_list([Head|Tail]) :-

write_stud(Head),

write_stud_list(Tail).

write_result :-!.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%

% Ввод данных из файла "students"

%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

read_file :-

see('students'),

read_stud,

seen,randomize,!.

read_stud :-

at_end_of_stream,!.

read_stud :-

read(stud(Name,Opyt,Money,Nastr,Place)),

new_stud(Name,Opyt,Money,Nastr,Place),

read_stud.

Трассировка:

1 1 Call: live(1) ?

2 2 Call: nl ?

2 2 Exit: nl ?

3 2 Call: write('All studs') ?

All studs

3 2 Exit: write('All studs') ?

4 2 Call: write_2line ?

5 3 Call: nl ?

5 3 Exit: nl ?

6 3 Call: write(======================================================================================) ?

======================================================================================

6 3 Exit: write(======================================================================================) ?

7 3 Call: nl ?

7 3 Exit: nl ?

4 2 Exit: write_2line ?

8 2 Call: write_all_stud ?

9 3 Call: write_2line ?

10 4 Call: nl ?

10 4 Exit: nl ?

11 4 Call: write(======================================================================================) ?

======================================================================================

11 4 Exit: write(======================================================================================) ?

12 4 Call: nl ?

12 4 Exit: nl ?

9 3 Exit: write_2line ?

13 3 Call: findall(_288,stud(_288,_289,_290,_291,_292),_332) ?

14 4 Call: stud(_288,_289,_290,_291,_292) ?

14 4 Exit: stud(yar,100,100,10,4) ?

13 3 Exit: findall(_288,stud(_288,_289,_290,_291,_292),[yar]) ?

14 3 Call: write_stud_list([yar]) ?

15 4 Call: write_stud(yar) ?

16 5 Call: write_line ?

17 6 Call: nl ?

17 6 Exit: nl ?

18 6 Call: write(--------------------------------------------------------------------------------------) ?

--------------------------------------------------------------------------------------

18 6 Exit: write(--------------------------------------------------------------------------------------) ?

19 6 Call: nl ?

19 6 Exit: nl ?

16 5 Exit: write_line ?

20 5 Call: stud(yar,_499,_500,_501,_502) ?

20 5 Exit: stud(yar,100,100,10,4) ?

21 5 Call: write(yar) ?

yar

21 5 Exit: write(yar) ?

22 5 Call: nl ?

22 5 Exit: nl ?

23 5 Call: write(' Opyt = ') ?

Opyt =

23 5 Exit: write(' Opyt = ') ?

24 5 Call: write(100) ?

100

24 5 Exit: write(100) ?

25 5 Call: write(' Money = ') ?

Money =

25 5 Exit: write(' Money = ') ?

26 5 Call: write(100) ?

100

26 5 Exit: write(100) ?

27 5 Call: nl ?

27 5 Exit: nl ?

28 5 Call: write(' Nastr = ') ?

Nastr =

28 5 Exit: write(' Nastr = ') ?

29 5 Call: write(10) ?

10

29 5 Exit: write(10) ?

30 5 Call: write(' Place = ') ?

Place =

30 5 Exit: write(' Place = ') ?

31 5 Call: write(4) ?

4

31 5 Exit: write(4) ?

32 5 Call: nl ?

32 5 Exit: nl ?

33 5 Call: write_line ?

34 6 Call: nl ?

34 6 Exit: nl ?

35 6 Call: write(--------------------------------------------------------------------------------------) ?

--------------------------------------------------------------------------------------

35 6 Exit: write(--------------------------------------------------------------------------------------) ?

36 6 Call: nl ?

36 6 Exit: nl ?

33 5 Exit: write_line ?

15 4 Exit: write_stud(yar) ?

14 3 Exit: write_stud_list([yar]) ?

37 3 Call: write_2line ?

38 4 Call: nl ?

38 4 Exit: nl ?

39 4 Call: write(======================================================================================) ?

======================================================================================

39 4 Exit: write(======================================================================================) ?

40 4 Call: nl ?

40 4 Exit: nl ?

37 3 Exit: write_2line ?

8 2 Exit: write_all_stud ?

41 2 Call: write_2line ?

42 3 Call: nl ?

42 3 Exit: nl ?

43 3 Call: write(======================================================================================) ?

======================================================================================

43 3 Exit: write(======================================================================================) ?

44 3 Call: nl ?

44 3 Exit: nl ?

41 2 Exit: write_2line ?

45 2 Call: randomize ?

45 2 Exit: randomize ?

46 2 Call: asserta(count(1,0)) ?

46 2 Exit: asserta(count(1,0)) ?

47 2 Call: asserta(count(2,0)) ?

47 2 Exit: asserta(count(2,0)) ?

48 2 Call: asserta(count(3,0)) ?

48 2 Exit: asserta(count(3,0)) ?

49 2 Call: asserta(count(4,0)) ?

49 2 Exit: asserta(count(4,0)) ?

50 2 Call: asserta(count(5,0)) ?

50 2 Exit: asserta(count(5,0)) ?

51 2 Call: findall(_1208,stud(_1208,_1209,_1210,_1211,_1212),_1252) ?

52 3 Call: stud(_1208,_1209,_1210,_1211,_1212) ?

52 3 Exit: stud(yar,100,100,10,4) ?

51 2 Exit: findall(_1208,stud(_1208,_1209,_1210,_1211,_1212),[yar]) ?

52 2 Call: live_studs(1,[yar]) ?

53 3 Call: rest ?

54 4 Call: retract(count(1,_1289)) ?

54 4 Exit: retract(count(1,0)) ?

55 4 Call: retract(count(2,_1322)) ?

55 4 Exit: retract(count(2,0)) ?

56 4 Call: retract(count(3,_1355)) ?

56 4 Exit: retract(count(3,0)) ?

57 4 Call: retract(count(4,_1388)) ?

57 4 Exit: retract(count(4,0)) ?

58 4 Call: retract(count(5,_1421)) ?

58 4 Exit: retract(count(5,0)) ?

59 4 Call: asserta(count(1,0)) ?

59 4 Exit: asserta(count(1,0)) ?

60 4 Call: asserta(count(2,0)) ?

60 4 Exit: asserta(count(2,0)) ?

61 4 Call: asserta(count(3,0)) ?

61 4 Exit: asserta(count(3,0)) ?

62 4 Call: asserta(count(4,0)) ?

62 4 Exit: asserta(count(4,0)) ?

63 4 Call: asserta(count(5,0)) ?

63 4 Exit: asserta(count(5,0)) ?

53 3 Exit: rest ?

64 3 Call: 1>0 ?

64 3 Exit: 1>0 ?

65 3 Call: _1651 is 1 ?

65 3 Exit: 1 is 1 ?

66 3 Call: nl ?

66 3 Exit: nl ?

67 3 Call: write(1) ?

1

67 3 Exit: write(1) ?

68 3 Call: write(' Days') ?

Days

68 3 Exit: write(' Days') ?

69 3 Call: write_2line ?

70 4 Call: nl ?

70 4 Exit: nl ?

71 4 Call: write(======================================================================================) ?

======================================================================================

71 4 Exit: write(======================================================================================) ?

72 4 Call: nl ?

72 4 Exit: nl ?

69 3 Exit: write_2line ?

73 3 Call: find_favorite_place([yar]) ?

74 4 Call: find_f([yar]) ?

75 5 Call: get_stud_place(yar,_1882) ?

76 6 Call: stud(yar,_1868,_1869,_1870,_1912) ?

76 6 Exit: stud(yar,100,100,10,4) ?

75 5 Exit: get_stud_place(yar,4) ?

77 5 Call: count(4,_1947) ?

77 5 Exit: count(4,0) ?

78 5 Call: _1981 is 0+1 ?

78 5 Exit: 1 is 0+1 ?

79 5 Call: retract(count(4,_1970)) ?

79 5 Exit: retract(count(4,0)) ?

80 5 Call: asserta(count(4,1)) ?

80 5 Exit: asserta(count(4,1)) ?

81 5 Call: find_f([]) ?

81 5 Exit: find_f([]) ?

74 4 Exit: find_f([yar]) ?

82 4 Call: count(1,_2091) ?

82 4 Exit: count(1,0) ?

83 4 Call: asserta(popular(1,0)) ?

83 4 Exit: asserta(popular(1,0)) ?

84 4 Call: find_f2 ?

85 5 Call: count(2,_2170) ?

85 5 Exit: count(2,0) ?

86 5 Call: popular(_2201,_2202) ?

86 5 Exit: popular(1,0) ?

87 5 Call: 0>0 ?

87 5 Fail: 0>0 ?

85 5 Call: count(3,_2170) ?

85 5 Exit: count(3,0) ?

86 5 Call: popular(_2201,_2202) ?

86 5 Exit: popular(1,0) ?

87 5 Call: 0>0 ?

87 5 Fail: 0>0 ?

85 5 Call: count(4,_2170) ?

85 5 Exit: count(4,1) ?

86 5 Call: popular(_2201,_2202) ?

86 5 Exit: popular(1,0) ?

87 5 Call: 1>0 ?

87 5 Exit: 1>0 ?

88 5 Call: retract(popular(1,0)) ?

88 5 Exit: retract(popular(1,0)) ?

89 5 Call: asserta(popular(4,1)) ?

89 5 Exit: asserta(popular(4,1)) ?

84 4 Exit: find_f2 ?

73 3 Exit: find_favorite_place([yar]) ?

90 3 Call: all_go_somewhere([yar]) ?

91 4 Call: move(yar) ?

92 5 Call: get_stud_place(yar,_2327) ?

93 6 Call: stud(yar,_2352,_2353,_2354,_2327) ?

93 6 Exit: stud(yar,100,100,10,4) ?

92 5 Exit: get_stud_place(yar,4) ?

94 5 Call: get_stud_nastr(yar,_2431) ?

95 6 Call: stud(yar,_2417,_2418,_2461,_2419) ?

95 6 Exit: stud(yar,100,100,10,4) ?

94 5 Exit: get_stud_nastr(yar,10) ?

96 5 Call: popular(_2458,_2459) ?

96 5 Exit: popular(4,1) ?

97 5 Call: 10<5 ?

97 5 Fail: 10<5 ?

92 5 Call: _2366\=_2327 ?

93 6 Call: _2353=_2327 ?

93 6 Exit: _2327=_2327 ?

92 5 Fail: _2354\=_2327 ?

92 5 Call: random(1,6,_2366) ?

92 5 Exit: random(1,6,5) ?

93 5 Call: set_stud_place(yar,5) ?

94 6 Call: stud(yar,_2419,_2420,_2421,_2377) ?

94 6 Exit: stud(yar,100,100,10,4) ?

95 6 Call: retract(stud(yar,_2417,_2418,_2419,_2420)) ?

95 6 Exit: retract(stud(yar,100,100,10,4)) ?

96 6 Call: asserta(stud(yar,100,100,10,5)) ?

96 6 Exit: asserta(stud(yar,100,100,10,5)) ?

93 5 Exit: set_stud_place(yar,5) ?

91 4 Exit: move(yar) ?

90 3 Exit: all_go_somewhere([yar]) ?

97 3 Call: all_do_something([yar]) ?

98 4 Call: get_stud_place(yar,_2548) ?

99 5 Call: stud(yar,_2534,_2535,_2536,_2578) ?

99 5 Exit: stud(yar,100,100,10,5) ?

98 4 Exit: get_stud_place(yar,5) ?

100 4 Call: do(yar,5) ?

101 5 Call: get_stud_nastr(yar,_2637) ?

102 6 Call: stud(yar,_2623,_2624,_2667,_2625) ?

102 6 Exit: stud(yar,100,100,10,5) ?

101 5 Exit: get_stud_nastr(yar,10) ?

103 5 Call: _2707 is 10*0.90000000000000002 ?

103 5 Exit: 9.0 is 10*0.90000000000000002 ?

104 5 Call: set_stud_nastr(yar,9.0) ?

105 6 Call: stud(yar,_2762,_2763,_2720,_2764) ?

105 6 Exit: stud(yar,100,100,10,5) ?

106 6 Call: retract(stud(yar,_2760,_2761,_2762,_2763)) ?

106 6 Exit: retract(stud(yar,100,100,10,5)) ?

107 6 Call: asserta(stud(yar,100,100,9.0,5)) ?

107 6 Exit: asserta(stud(yar,100,100,9.0,5)) ?

104 5 Exit: set_stud_nastr(yar,9.0) ?

108 5 Call: get_stud_money(yar,_2866) ?

109 6 Call: stud(yar,_2852,_2896,_2853,_2854) ?

109 6 Exit: stud(yar,100,100,9.0,5) ?

108 5 Exit: get_stud_money(yar,100) ?

110 5 Call: _2938 is 100*1.3999999999999999 ?

110 5 Exit: 140.0 is 100*1.3999999999999999 ?

111 5 Call: set_stud_money(yar,140.0) ?

112 6 Call: stud(yar,_2993,_2951,_2994,_2995) ?

112 6 Exit: stud(yar,100,100,9.0,5) ?

113 6 Call: retract(stud(yar,_2993,_2994,_2995,_2996)) ?

113 6 Exit: retract(stud(yar,100,100,9.0,5)) ?

114 6 Call: asserta(stud(yar,100,140.0,9.0,5)) ?

114 6 Exit: asserta(stud(yar,100,140.0,9.0,5)) ?

111 5 Exit: set_stud_money(yar,140.0) ?

100 4 Exit: do(yar,5) ?

115 4 Call: write_line ?

116 5 Call: nl ?

116 5 Exit: nl ?

117 5 Call: write(--------------------------------------------------------------------------------------) ?

--------------------------------------------------------------------------------------

117 5 Exit: write(--------------------------------------------------------------------------------------) ?

118 5 Call: nl ?

118 5 Exit: nl ?

115 4 Exit: write_line ?

119 4 Call: all_do_something([]) ?

119 4 Exit: all_do_something([]) ?

97 3 Exit: all_do_something([yar]) ?

120 3 Call: write_line ?

121 4 Call: nl ?

121 4 Exit: nl ?

122 4 Call: write(--------------------------------------------------------------------------------------) ?

--------------------------------------------------------------------------------------

122 4 Exit: write(--------------------------------------------------------------------------------------) ?

123 4 Call: nl ?

123 4 Exit: nl ?

120 3 Exit: write_line ?

124 3 Call: write_2line ?

125 4 Call: nl ?

125 4 Exit: nl ?

126 4 Call: write(======================================================================================) ?

======================================================================================

126 4 Exit: write(======================================================================================) ?

127 4 Call: nl ?

127 4 Exit: nl ?

124 3 Exit: write_2line ?

128 3 Call: _3400 is 1-1 ?

128 3 Exit: 0 is 1-1 ?

129 3 Call: live_studs(0,[yar]) ?

129 3 Exit: live_studs(0,[yar]) ?

52 2 Exit: live_studs(1,[yar]) ?

1 1 Exit: live(1) ?

(172 ms) yes

{trace}