Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Зачем нужен предикат display(...)?.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Altur Altur вне форума
Member
 
Сообщений: 87
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2005
По умолчанию Зачем нужен предикат display(...)?. - 10.09.2014, 15:09

В книге Косты про VP70 рекомендован вызов формы или диалога в виде
Visual Prolog Код:
X=myform::new(Parent), X:show().
А уже в переизданиях про VP72 и VP73
Visual Prolog Код:
X=myform::display(Parent)
. При этом предикат
Visual Prolog Код:
display(Parent):-new(Parent)=X,X:show()
автоматически вставляется в каждую форму или диалог, т.е. это намек на его важность. Хотя если его удалить, то вроде бы ничего страшного не происходит, программа компилируется и форма вызывается и ведет себя обыкновенно.
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,841
Сказал(а) спасибо: 2
Поблагодарили 285 раз(а) в 285 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 10.09.2014, 23:37

Цитата:
Сообщение от Altur Посмотреть сообщение
Зачем нужен предикат display(...)
Ну, наверное, чтобы не писать new и show. Лаконично, экономично, эргономично, экологично...
Ответить с цитированием
  (#3 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 466
Сказал(а) спасибо: 17
Поблагодарили 31 раз(а) в 31 сообщениях
Регистрация: 28.03.2012
По умолчанию 11.09.2014, 01:05

Цитата:
Сообщение от Винитарх Посмотреть сообщение
наверное, чтобы не писать new и show.
да.
Просто Display - это логический уровень, а new/show - технический. Легко представить ситуацию, когда при display вы просто показываете уже существующий (открытый) диалог этого типа, а не создаете новый. А детали реализации - скрыты.

в IDE например это диалог поиска по файлам Ctrl+Shift+F
Ответить с цитированием
  (#4 (permalink)) Старый
Altur Altur вне форума
Member
 
Сообщений: 87
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.10.2005
По умолчанию 11.09.2014, 15:53

Некоторые неудобства возникают, когда используешь нестандартный конструктор. Тогда приходится вместе с new(…) исправлять и display(…) (или его удалять). (Это происходит в версии VP75. В VP72 такой проблемы не возникало; видимо, предполагалось, что действенны оба конструктора – стандартный, вызываемый предикатом display(…) и нестандартный). При той дискуссии об экономии средств выражения для рутинных ситуаций, что была в "общей теме" предикат dysplay(…) выглядит избыточным. (Или все же имеется ввиду, что не стоит баловаться нестандартными конструкторами?)
Цитата:
Легко представить ситуацию, когда при display вы просто показываете уже существующий (открытый) диалог этого типа, а не создаете новый.
А как это возможно? Наверное, придется написать новый dysplay, который бы по случаю не обращался к конструктору? Тогда не проще ли использовать один show()?
Ответить с цитированием
  (#5 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 466
Сказал(а) спасибо: 17
Поблагодарили 31 раз(а) в 31 сообщениях
Регистрация: 28.03.2012
По умолчанию 12.09.2014, 01:28

Цитата:
Сообщение от Altur Посмотреть сообщение
А как это возможно?
возможно всё

Цитата:
Сообщение от Altur Посмотреть сообщение
который бы по случаю не обращался к конструктору?
да, что-нибудь такое (упрощенно немного для ясности)

prolog Код:
class facts
  mydialog : (dialog) determ.
clauses
  dialog() :-
    mydialog(Dialog),
    !,
    Dialog:show().
  dialog() :-
    new():show().
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 466
Сказал(а) спасибо: 17
Поблагодарили 31 раз(а) в 31 сообщениях
Регистрация: 28.03.2012
По умолчанию 12.09.2014, 01:44

подправил чуть
prolog Код:
class facts
  mydialog : (dialog) determ.
clauses
  dialog() :-
    mydialog(Dialog),
    !,
    Dialog:show().
  dialog() :-
    Dialog = new(),
    assert(mydialog(Dialog)),
    Dialog:show().
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зачем светодиоду нужен резистор? INFERION Библиотека 16 16.11.2016 07:16
Зачем нужен параметр ios showpoint в setiosflags Gock C++ Builder 5 28.12.2009 08:58
Зачем нужен этот файл? Blan Софт и программы 2 22.03.2008 08:03
Dumpbin, зачем нужен параметр /out:filename Narwal Мысли вслух 0 22.01.2007 13:09
Зачем нужен 6.3 если есть 5.2? semantics Prolog 2 29.04.2006 21:26
Зачем нужен Build Project. Чем он отличается от Compile Project Gold_Dreamer Delphi 2 28.10.2005 00:07
Зачем нужен и обратный , и дополнительный код ra1n Assembler 1 18.10.2005 10:13
Зачем нужен auto_ptr_ref? imported_Петр С/С++ 0 05.09.2005 21:25
Зачем нужен WM COMMNOTIFY Vitold S WinAPI 1 26.11.2004 23:33
Unable to display help ivan Visual Basic 0 19.11.2004 10:41
Зачем нужен указатель на указатель Diver С/С++ 7 23.07.2004 06:42
Зачем нужен XSL-FO, если есть XSLT AssAsin XML & WML 2 02.12.2003 18:56



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