Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Библиотека
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
jonko jonko вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.10.2009
По умолчанию 16.11.2009, 02:48

Помогите пожалуйста! Хотя бы идеей...
Книгу в библиотеке можно можно выдавать читателю, если он не задолжник и за ним числится не более 2-х книг. Определить, кому можно выдавать книги. О каждом читателе известно, какие у него книги и срок их сдачи.
Ответить с цитированием
  (#2 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 16.11.2009, 17:46

ну, для начала составьте базу фактов со сведениями о читателях. Напишите примеры фактов.
Ответить с цитированием
  (#3 (permalink)) Старый
jonko jonko вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.10.2009
По умолчанию 16.11.2009, 18:38

Так верно?
Код:
reader(ivanov, "Tihiy Don", data(2009,11,30)).
reader(ivanov, "Voyna i mir", data(2009,11,29)).
reader(ivanov, "Skotniy dvor", data(2009,11,29)).
reader(petrov, "Velikiy Getsby", data(2009,11,15)).
reader(petrov, "Zavodnoy apelsin", data(2009,11,20)).
reader(sidorov, "1984", data(2009,11,10)).
reader(kostina, "Master i Margarita", data(2009,11,31)).
reader(kostina, "Ubit Peresmeshnika", data(2009,11,31)).
reader(nujnenko, "Ovod", data(2009,11 23)).
reader(nujnenko, "Olivia Letam", data(2009,11,23)).
reader(nujnenko, "Stepnoy volk", data(2009,11,26)).
Ответить с цитированием
  (#4 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 16.11.2009, 19:17

Ну, отлично. Вот так можно сделать в VIP 5.2 и наверняка в Турбо Прологе (в нем уточните, как считывается текущая дата):
Код:
domains
data=data(integer,integer,integer)
sl=string*
database
reader(symbol,string,data)
database - temp
reader_name(symbol)
clauses
reader(ivanov, "Tihiy Don", data(2009,11,30)).
reader(ivanov, "Voyna i mir", data(2009,11,29)).
reader(ivanov, "Skotniy dvor", data(2009,11,29)).
reader(petrov, "Velikiy Getsby", data(2009,11,15)).
reader(petrov, "Zavodnoy apelsin", data(2009,11,20)).
reader(sidorov, "1984", data(2009,11,10)).
reader(kostina, "Master i Margarita", data(2009,11,31)).
reader(kostina, "Ubit Peresmeshnika", data(2009,11,31)).
reader(nujnenko, "Ovod", data(2009,11 ,23)).
reader(nujnenko, "Olivia Letam", data(2009,11,23)).
reader(nujnenko, "Stepnoy volk", data(2009,11,26)).
predicates
prev(data,data)
nondeterm reads(symbol,string)
nondeterm bad_reader(symbol)
nondeterm good_reader(symbol)
clauses
reads(Name,Book):- 
    reader(Name,Book,Data),date(Y,M,D),prev(data(Y,M,D),Data).

bad_reader(Name):- findall(Book,reads(Name,Book),L),
    L=[_,_,_|_].
bad_reader(Name):- reader(Name,_,Data),    date(Y,M,D),
    prev(Data,data(Y,M,D)).

prev(data(Y,_,_),data(Y1,_,_)):- Y<Y1, !.
prev(data(Y,M,_),data(Y,M1,_)):- M<M1, !.
prev(data(Y,M,D),data(Y,M,D1)):- D<D1.

good_reader(Name):- 
    reader(Name,_,_),not(reader_name(Name)),assert(reader_name(Name)),fail;
    reader_name(Name),
    not(bad_reader(Name)).
goal
good_reader(Name),write(Name),nl,fail;true.
Ответить с цитированием
  (#5 (permalink)) Старый
jonko jonko вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.10.2009
По умолчанию 12.12.2009, 18:06

Возник еще один вопрос. Как можно выбрать среди бэд_ридеров самого плохого, то есть того, кто не посещал библиотеку дольше всех...у кого дата возврата книги самая старая?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,977
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 12.12.2009, 19:55

Вот такой предикат поможет Вам:
Код:
bed_reader(N):-reader(N, _, D),not(раньше(D)).
Только Вам осталось дописать вспомогательный предикат раньше(D), который проверяет что больше нет в БД читателей с более ранней датой. Попробуйте сами.
Ответить с цитированием
  (#7 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 12.12.2009, 22:43

Нужно добавить такой код:
Код:
predicates
nondeterm the_worst_reader(symbol)
previous(data)
clauses
the_worst_reader(Name):-
    bad_reader(Name),
    reader(Name,_,Date),
    not(previous(Date)).

previous(Date):-
    reader(Name,_,Date1),
    prev(Date1,Date),
    !.
Чтобы сократить вычисления, лучше вытащить дату прямо в bad_reader (если Вам это действительно надо ;-) )
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БИБЛИОТЕКА ПО ПРОЛОГУ!!! Винитарх Prolog 88 09.12.2015 01:58
Библиотека gmp c++ Tasbka Любые вопросы от новичков 1 13.03.2012 00:41
библиотека api Иван1 Assembler 8 26.08.2011 18:48
Библиотека Boost C++ egork2 Visual C++ 7 11.06.2008 12:44
Qt dll библиотека как с ней работать just_vladimir Trolltech Qt 8 15.11.2007 23:21
Библиотека имени Ленина Зирк Юмор 2 04.08.2006 11:09
DLL библиотека как с ней работать Хиларион Delphi 5 17.07.2006 23:54
Библиотека dll на MSVC++ 6.0 SSCorp Delphi 6 23.06.2006 12:28
С++ библиотека для покетов Racheengel Windows CE 0 16.01.2006 17:16
Не загружается библиотека DLL uran238 Visual C++ 5 08.03.2005 17:32
Ресурсы и DLL библиотека sadhoo Delphi 2 10.06.2004 17:19
Переносимая библиотека XML imported_John С/С++ 1 19.02.2003 11:56



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов