Моделирование объекта - студенты
.docМинистерство высшего и среднего образования РФ
Санкт-Петербургский государственный
электротехнический университет
им. В.И.Ульянова (Ленина)
Кафедра МО ЭВМ
Дисциплина: «Логическое программирование»
Отчет по лабораторной работе №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}