Компьютерный форум

Компьютерный форум (http://www.hardforum.ru/)
-   Prolog (http://www.hardforum.ru/f141/)
-   -   Как это по-русски ... (http://www.hardforum.ru/t75798/)

Altur 27.11.2007 23:01

У Турбо Пролога была одна симпатичная черта, когда многие (написанные в декларативном стиле) его предложения можно было пересказать обычным человеческим языком. И наоборот, некоторые рассуждения (записанные на английском языке) могли работать как программы. Для этого ряд знаков ТПролога могли быть без ущерба для функциональности заменены на слова человеческого языка: (:- = if), (, = and), (; = or). Такая особенность облегчала программирование для непрофессионалов - стоило лишь записать словами свое размышление о задаче, а затем немного подправить в соответствии с условиями ТПролога - и программа готова. При переходе к VIP, и особенно к VIP6 и далее были перенесены наработки других языков, успешно справляющихся с современным оборудованием и возросшим объемом программ. Но при этом та симпатичная черта Пролога была загнана на задний план, стала незаметной и, возможно, несущественной. А жаль. У меня просьба к тем, кто хорошо освоился с синтаксисом VIP6-7, не могли бы вы на русском языке пересказать некоторые начальные участки программ (которые приходится писать почти в любом случае), например из тех, что приведены в книге E.Costa, чтобы их писать не автоматически, а осознавая, что делаешь. Скажем, эти:

Код:

clauses
  onMouseDown(S,Point,_ShiftControlAlt,_Button):-
    W=S:getVPIWindow(), ...

    onFileNew(S,_MenuTag):-Q=query::new(S),Q:show().
________
class facts
  mousePoint:=pnt(-1,-1).
predicates
  onMouseDown: drawWindow::mouseDownListener.
clauses
  onMouseDown(_S,Point,_ShiftControlAlt,_Button):-
    mousePoint:=Point, ...


Винитарх 28.11.2007 00:09

ТО, что Вы привели, писать ручками не надо. Этот код:
Код:

onMouseDown(S,Point,_ShiftControlAlt,_Button):-

onFileNew(S,_MenuTag):-

вставляется автоматически. Имена предикатов говорят сами за себя.
То, что Вы пишете о Турбе, по большому счёту осталось и в VIP. Просто появились дополнительные вкусности.

Alison 28.11.2007 10:59

Altur, и "раньше" на правила, описывающие предикат, можно было смотреть как с декларативной точки зрения, так и с процедурной. Так что здесь, когда речь идет о GUI, лучше бы смотреть с процедурной.
Например, когда происходит выбор пункта меню File -> New, создается объект класса query и происходит визуализация соответствующей формы.
Предикат onFileNew истинен, если тело правила истинно.
Вызов предиката onFileNew завершится успехом, если оба описанных выше действия выполнятся успешно.

Altur 28.11.2007 21:53

Я понимаю, это выглядит глуповато, но мне было бы гораздо приятнее вместо знаков ( := :: : ) проговаривать про себя какие-то слова. Вероятно, мозги так устроены, что запоминаются только осмысленные действия. А то, что их ручками писать не надо, так иногда надо и ручками подправить (если понимаешь, что написано).

Alison 29.11.2007 22:01

x := a
"запомним значение a в факте-переменной x"

c::q
"предикат q класса c"

O:p
"метод p объекта O"

http://www.hardforum.ru/images/smili...icon_smile.gif

Altur 02.12.2007 14:48

Alison, большое спасибо Вам за помощь! (А то подсмеиваться все горазды).

Alison 03.12.2007 00:08

(над собой подсмеиваются, может даже не замечая этого http://www.hardforum.ru/images/smili...icon_smile.gif)


Часовой пояс GMT +4, время: 20:08.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.