Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу База vs Переменная
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
imported_Black_Dragon imported_Black_Dragon вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.10.2005
По умолчанию База vs Переменная - 13.10.2005, 10:47

О больших продуктах речь не виду, пролог для меня так, интересное и приятное развлечение (хотя...) (основные потребные проги пишу на С++)

Для получения результата требуются какие то данные на входе, да и в процесе вычислений могут появляться данные, да и на выходе тоже может быть набор данных перед отображением результатов.

Набор даных может передоваться между предикатами в переменных, а может находится в базе.

Вот для своего развития в области программирования пролога мне стало интересно: где и какие данные держать и как ими обмениваться, в общем виде, или есть нюансы, например, если с данынми в таком то аллгоритме работать по такой "методике", обработка будет быстрее, а если по другой, то проще код/аллгоритм. Там для такого аллгоритма (там в ширину, глубину или еще чего то) то входный данные должны быть там в переменных или в базе, промежуточные вот так должны описываться или использоваться.
звиняйте если сумбурно
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,861
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 14.10.2005, 01:09

Вопрос хорош. Но я бы тему назвал не "База vs Переменная", а "факты пИ/ИЛИ переменные".
Моё мнение таково.
1. Формат представления входных данных (факты или переменные) определяется задачей. Иногда одни и те же данные могут храниться в двух форматах одновременно, или в одном, но в виде двух разных копий.
2. Формат представления промежуточных данных определяется наличием бэктрекинга.
Если бэктрекинг используется, то для него данные должны быть представлены только в виде переменных. А бэктрекинг используется в Прологе повсеместно.
Если надо сохранять промежуточные результаты рекурсии или бэктрекинга, то их надо скидывать в БД, а после выхода из рекурсии/бэктрекинга - собрать факты findall'ом или ещё как-нибудь.
Если нужны глобальные переменные, то надо использовать факты БД. Не надо думать, что Пролог работает с БД медленно. Скорость работы с фактами БД очень высока.
Если нужен произвольный доступ к данным - это факты БД.
Если нужен последовательный доступ к данным - это переменные-списки.
Если исползуется рекурсия, то данные представляются списками, а промежуточные данные сохраняются в виде фактов.
Если используется цикл repeat-fail, то промежуточные данные сохраняются только в виде фактов.
3. Формат представления выходных данных определяется задачей и может быть любым/комбинированным.

Некоторые проложисты не любят БД, так как она лежит якобы вне логики. Лично я выбираю форму представления данных исходя из задачи и спосба обработки этих данных. Когда есть опыт, то сразу видно что и когда лучше использовать. Критерий здесь один - удобство программирования и лаконичность исходника. Скорость обработки фактов БД и переменных примерно одинаковы, т.к. БД Пролога - это не БД в обычном понимании этого термина. Факты БД можно просто считать глобальными переменными процедурных языков.

Параллельность или последовательность алгоритма мало что определяет. Определяют исходные данные задачи.
Если задача на графах, то граф как правило хранится в виде БД.
Если задача на деревьях, то древовидная структура передаётся в виде переменной, но одновременно может храниться и виде факта БД, если того требует постановка задачи.
Если задача о множествах, то множество представляется или в виде БД или в виде переменной-списка, всё зависит от того, что надо найти в задаче.
Если задача об упорядоченных множествах, то они храняться в виде списков.
Если задача - головоломка (логическая), то всё хранится как правило в виде переменных, т.к. большинство малоразмерных головоломок решается бэктрекингом.
Если задача - обработка текста, то используют только переменные.

Бывают задачи, которые можно сделать одинаково эффективно и в переменных и в фактах БД.
Бывают задачи, которые решаются только в одонм способе представления данных.
Большинство задач использует и переменные и факты.

Покопайтесь на форуме - сразу станет видно какой тип задач какое представление использует.

По поводу VIP6.
В нём глобальная БД запрещена и все передачи между блоками программы осуществляются только через переменные. PDC мотивирует это тем, что это воспитывает аккуратность и культуру программирования, а также повышает надёжность программ.
Ответить с цитированием
  (#3 (permalink)) Старый
imported_Black_Dragon imported_Black_Dragon вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.10.2005
По умолчанию 14.10.2005, 07:21

Цитата:
Originally posted by Винитарх
[b]По поводу VIP6.
В нём глобальная БД запрещена и все передачи между блоками программы осуществляются только через переменные. PDC мотивирует это тем, что это воспитывает аккуратность и культуру программирования, а также повышает надёжность программ.
Фишку не понял, а если в БД находится десятки тысяч фактов, или в один модуль надо помещать то, что работает со всей базой и саму базу, а в другие модуля вспомогательные?
Ответить с цитированием
  (#4 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,861
Сказал(а) спасибо: 2
Поблагодарили 287 раз(а) в 287 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 17.10.2005, 21:37

Black_Dragon пишет:
Цитата:
Фишку не понял, а если в БД находится десятки тысяч фактов, или в один модуль надо помещать то, что работает со всей базой и саму базу, а в другие модуля вспомогательные?
1. Вообще-то вопрос не по адресу.
2. "Адрес" на этот вопрос отвечает так: помещайте всю БД в один класс и работайте с этой БД внутри этого класса. Если нужно передать факты (хоть все десятки тысяч) в другой класс, то соберите их findall-ом и передавайте через пеерменную. Сбор фактов идёт мгновенно (это правда). Кому не нравиться посол - ешьте щи в другой столовой.
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных об объектах, поиск объектов по признакам. База хранится в файле. znakos Prolog 1 16.04.2012 20:47
переменная lollipop Perl 0 20.10.2011 21:26
Массив и переменная. Vovik_0_1 C++ Builder 1 27.08.2011 02:38
анонимная переменная ratata Prolog 5 13.07.2011 17:09
Переменная String Chron4ik Pascal 4 05.11.2009 21:50
Что за переменная acc, и что она делает super_girl Lisp 7 10.05.2007 09:08
VB переменная = дата Corvus81 Visual Basic 3 02.04.2007 14:18
Как отследить, где портится переменная в VC++7 Palmman Visual C++ 8 18.02.2006 00:15
Что такое переменная-функция Mihei Delphi 2 06.06.2005 19:40
Переменная в переменной Lesh PHP 3 12.02.2005 12:52
Переменная $SCRIPT_URL -как установить? imported_veles PHP 8 28.10.2004 22:58
не пишется session - переменная Anonymous PHP 1 18.11.2003 11:20



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