roomnum(sich, 14).
roomnum(dafi, 23).
roomnum(materik, 35).
clock(day, '15:00').
clock(day, '16:00').
clock(day, '17:00').
clock(night, '18:00').
clock(night, '19:00').
clock(night, '20:00').
filmname(1, 'The Matrix').
filmname(2, 'Prolog').
filmname(3, 'SWI').
filmname(4, 'help').
filmname(5, 'editor').
price(min, 12).
price(min, 14).
price(min, 16).
price(max, 18).
price(max, 22).
price(max, 24).
%seance(roomnum, date, time, filmname, price$, ind)
seance(14, 20, '16:00', 2, 14, 0).
seance(14, 21, '17:00', 3, 16, 1).
seance(14, 20, '18:00', 1, 18, 2).
seance(23, 21, '15:00', 2, 12, 3).
seance(23, 20, '16:00', 3, 14, 4).
seance(23, 20, '17:00', 1, 16, 5).
seance(35, 20, '15:00', 5, 14, 6).
seance(35, 21, '16:00', 4, 14, 7).
seance(35, 21, '17:00', 3, 18, 8).
seance(35, 20, '18:00', 1, 24, 9).
seance(35, 20, '19:00', 2, 22, 10).
seance(14, 20, '19:00', 3, 24, 11).
minprice(Filmname, Time, Price):-
filmname(_,Filmname),
price(min, Price),
clock(day,Time).
maxprice(Filmname, Time, Price):-
filmname(_,Filmname),
price(max,Price),
clock(night,Time).
dayseance(Filmname, Time, RNum, Price):-
filmname(_,Filmname),
clock(day,Time),
roomnum(RNum,_),
price(_,Price).
/* сумма цен по определенной дате, рекурсия */
sum(Date,_,0):-
not(seance(_,Date,_,_,_,_)),!.
sum(Date,N,S):-
seance(_,Date,_,_,Price,N),
N1 is N+1,
sum(Date,N1,S1),
S is S1+Price.
/* не рекурсивно */
sdsum(Date, Sum):-
seance(_,Date,_,_,Price,_),
write(Price),nl,
summo(X),
retract(summo(_)),
X2 is X+Price,
assert(summo(X2)),
fail.
sdsum(_,_)
:-
summo(X),
write('Sum ='),
write(X),
retract(summo(_)),
assert(summo(0)).
:-
assert(summo(0)).
рекурсия, prolog
sum - должен считать сумму цен по определенной дате (введенной пользователем в переменную Date). вроде бы с циклом все понятно, но вот с полной реализацией трудности(.
Код: