Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 21:36   #1
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Вопрос рекурсия, prolog

доброго вечера ув. форумчане. Помогите разобраться с простенькой задачей на рекурсию. Никак не получается реализовать восходящую и нисходящую (хвостовую) рекурсию. Предметная область - расписание киносеансов.

sum - должен считать сумму цен по определенной дате (введенной пользователем в переменную Date). вроде бы с циклом все понятно, но вот с полной реализацией трудности(.

Код:
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)).
mego4el вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия в Prolog. ANTON2527 Помощь студентам 1 27.05.2010 13:12
prolog Studento4ka Помощь студентам 0 18.04.2010 11:17
Prolog Debro Помощь студентам 2 26.12.2009 10:16
Prolog Zeraim Общие вопросы Delphi 1 14.05.2008 18:01
Prolog 301 Помощь студентам 10 27.03.2008 20:43