Visual Prolog 7.0 для новичков


210 34 3MB

Russian Pages 122 Year 2007

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

Visual Prolog 7.0 для новичков

  • Commentary
  • 2416
  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

 

 

 

EduardВ CВsta 

Visual Prolog 7.0 for Tyros    

 

о о   20.07.2007 

к a.k.a. ‐S‐ 

Update 1 Revision 73

К

 

 

д к о е  ‐ пе е од т  подо е тек т .  о‐пе ,  ол у   т  те о   о ет  о ‐ т т   оо е  е  пе е од , пото у  то п о т   е  о пол у т   ле о , о о     л ко   те  т  те о ,   о еп т  пе е од д е е л    е т , то  е  кло ет‐ ,  л     екото     л д т к к  ед  у ед е о.  о‐ то ,  е  е   ео од о  е‐ т  кл е ку  п о ле у пе е од :  у о л  пе е од т  до ло о,  л   у о  е те   пе е о‐ до   е ё    пе е т т   т л т ку  тек т ,  то   о   оот ет т о л  о еп то   т л т ке  у ко о  к .  Ко е о  е,  о о  оп едел т   т.  .  « де л »  пе е од:  тек т,  п   т к,  к к  е о    п л о л   то , е л     о од о  л дел  ко  пе е од .  о,  то  пе е е т  тек т      е кол к   к . =)  т к к е т е о,  ео од о  т   т   то о , то е т , п т  к ё,    л пе е од т   ту к у, ко д  о   л  Visual Prolog 6.3 for Tyros,   п ед ‐ л ,  оот ет т е о, дл   е , 6.3,пол у    то  е  ое  е   едо   отк  Visual  Prolog 7.0. Это  ло  е   п т   ле е е , т к к к  екото е п о    к   ‐ от л   е т к, к к  до,  л ,  е  е о,  е  от л   оо е, о  ё   е п од ло  п т    ко ‐ е т .  од о о лё о о тек т   л  е  от  т  п о ле ,  о п о о ёл, у е ко д  пе‐ е од  од о о тек т   л  ко е ,  то пот е о ло от  е  е ё   пе е о о т     оту. :)  епе  ко к ет о.    е пе е од л  е   о т е е  де   тек те.  кл е е  дел о дл   е  л де , дл  кото    п о у  у ку  т к п    о л ое  л кое  п е    ко к . О о ле е по  ол е   т  о т ле о  то кое,    кл е е  то о,  то   по ол л  е е «п одол т » о о ле е т ,  де, к к  е пок ло , о о дол о  ло  т ;  то от о т   к  ку о у  деле   пу кто   е     о о о у  ту  л т о   код .  л   те о ,  подо   project  tree,  code  expert    package, п дле  ко к ет о те е тек т ,    пол о л  о т е  пе е од, т к к к тек т  т л   т уд о т ел , е л      о т л    е  пе е од ..  л   те о ,  е   о еупот е тел   к ле т    у ко   ке,    пол о л   т   к ле то , д е е л ,  о о о,  е е  к ле т  отл ло  от  е  те     ‐ л ко   ке (те   олее  то  т  те   ол е   т     о  п о то ).    т л   о т   то ку   т л т ку  ет о уто  –  то  ло до ол о ле ко, т к к к    ‐ пол о л  до ло   пе е од  е де,  де  о о  –  о    екото   е т  п ло   е‐т к   пе е‐   е е‐ т о т  п едло е  до ол о  тел о, т к к к   до ло о  пе е оде    е ол ,  тол ко  дл   п о то о  оот ет т   п л   у ко о  к ,  т   п едло е   т о л   по о    о е   ед.    екото   е т    по ол л  е е пол о т   е т   екото е  ,  то к ет ,    т о т , подп е  под  екото   у к .  епе  те е к   о .   ко е по т  к до   л   еет   дел  Examples ‐ п е‐ ,    кото о   пе е л т   п о ,  од е  код   кото   п ло е   к  то у  тек ту    от‐ дел о   е.  к е, к  дл   е  7.0  л ет  о о ле е  т ко   е к  дл   е  Visual Prolog 6.3 –  Visual Prolog 6.3 for Tyros. Это о ло,  то  екото е  о е  око  IDE  ед о   е   ел   екото е  о де     ок   е то   е ,    е о,  о е   ко к ет о  дл   Visual  Prolog 7.0  т    око    кл е ко   т ле о о ле  Windows,   то  е  к к  о е ,  е  т е о е о о ле ,  то  о т л к к  л  –    т ле WinXP‐Standard (Blue).   по ол л  е е    о  о е ед  о о т   т   о е ,  то  к   л дел   олее  ело т о т о .   о л о о  тек т   пол о т   уд ле   пе е е   у ко ,  ледо   у    оде ‐ е ,   Index ( п ок  пол о    тек те те о ),    о  ко е.     

 



  К д       ел оп т о е     у  к     т т , кото е  ол е  к т,  е  пок т  кл д  то .  п е ,  е ‐ о ,  к  де Л пл  (Pierre­Simon, Le Marquis de  Laplace),  т л  тол ко  од   у ок    о   « е е у   е ку»  (Méchanique  Celeste),    е о  о  (Mel Gibson),  п л  о   Arithmetices Principia Novo Methodo Exposita   л ‐ (Peano), к к  ел  т !    ду ,  п е ,  п ду   пу л ко т   к   «дл   ко »,  дел л  о о  де е .  О   по л,  то  ол т о  л де   п едпо тут  т    « ко »,  е   по т е т     Л пл о .  о т к к к    е  от те    т    « ко »,    ет  дело    к о ,  ‐ 1 е  то  к  Prolog for tyros ,  е for dummies.  Eduardo Costa      

Uxoribus Amantissimis Liberisque Pientissimis

                                                               ло о  tyro  т о о    л т

1

Prolog дл   о

 

ко » ( де    д лее п

:  tyro=tiro  –  л т.  о . пе .). 

ок. 

к

 о

о ,  к

 

ет   «Visual 



  Ко

е т

 пе е од

ед ло

е ________________________________________________________________ 3 

оде л

к  ___________________________________________________ 2 

е  ________________________________________________________________ 4   1: 

еде о д

1.1. 

е __________________________________________________________ 7 

е п оект    Visual Prolog ______________________________________________ 7 

1.1.1.  о д е  о о о GUI п оект   _____________________________________________________  7  1.1.2.  Ко п л     пу к п о   __________________________________________________  8 

е

1.2. 

л

 2: 

 __________________________________________________________________ 8 

о

  ___________________________________________________________ 9 

2.1. 

о д

2.2. 

кл

е

2.3. 

о

ле е

2.4. 

л

 3: 

о

е п

ел   д : e.g. пу кт File/New __________________________________ 11 

е код  к п ед ету   де е  п оект    CodeExpert  ___________________ 12   _________________________________________________________________ 12 

 код к  о

т

 MouseDown _________________________________________ 14 

onPaint ___________________________________________________________________ 14  е

3.3. 

л

  ___________________________________________________________ 9 

Mouse events  _____________________________________________________ 14 

3.1.  3.2. 

е  о

 4: 

 _________________________________________________________________ 15 

о е

е к

т

ок  ______________________________________________ 16 

4.1. 

ел   д  ______________________________________________________________ 16 

4.2. 

е е о п оект   ___________________________________________________________ 16 

4.2.1.  Code Expert ____________________________________________________________________  17 

о д

4.3. 

е  ле е т  п оект  _________________________________________________ 18 

4.4. 

ел   д . _____________________________________________________________ 19 

4.5. 

е   о . ____________________________________________________________ 19 

4.6. 

о д

4.7. 

оде

е  о о о кл

ое  т ок   од  __________________________________________________ 22  е

4.8. 

л

 5:  у к

 _______________________________________________ 24 

 __________________________________________________________________ 24 

е е

5.3. 

 __________________________________________________________________ 25 

о е т е

5.4.  5.4.1. 

 

  о

ед к т  ________________________________________________________________ 24 

5.2. 

5.5. 

 _________________________________________________________________ 23 

едло е

5.1. 

  ____________________________________________________ 20 

о

Ло

е  е е ,  пол у

е к е 

5.6. 

пл к

5.7. 

едло е

  __________________________________________________ 28   п ед к т     о е т е   е е  _________________  28 

к .  ________________________________________________________ 30    ______________________________________________________________ 30    о

. _______________________________________________________ 31  4 

5.8. 

О

ле

5.8.1.  О

ед к т  

5.9. 

е

5.11. 

 6: 

6.1. 

От е е

е п

ло е

 ___________________________________________ 35 

е  ________________________________________________________________ 35 

п к   ___________________________________________________________________ 36 

6.3. 

е

6.4. 

Опе

 о

отк   п ко   __________________________________________________ 39    о  т ок

 7: 

. _____________________________________________________ 40 

т к   _____________________________________________________ 46 

7.1. 

т

е к

 

л  ____________________________________________________ 46 

7.2. 

т

е к

 

те   ____________________________________________________ 47 

7.3. 

о е у 

7.4. 

л

 _________________________________________________________________ 49 

о

е ________________________________________________________ 50 

onPainting  ________________________________________________________________ 50 

8.2. 

л

оло ? ___________________________________________________________ 48 

е

 8: 

8.1. 

ол о тел к е  ле е т  уп

 9: 

п  д

ле

  _____________________________________ 52 

  _____________________________________________________ 54 

т

9.1. 

е т п  д

 _________________________________________________ 54 

9.2. 

о е т   _______________________________________________________________ 55 

9.3. 

о е т  

9.4. 

о

9.5. 

е т

9.6. 

о

9.7. 

о е

9.7.1.  9.7.2. 

л л

л

е 

о

л   ____________________________________________________ 57  л   _____________________________________________________ 58 

е __________________________________________________________ 58 

 __________________________________________________________________ 59 

К к  е

т   то   

оло е _______________________________________ 63 

т л т  __________________________________________________________________ 63 

 11: 

кт   ________________________________________________________ 75   file  _________________________________________________________________ 77  те е    од  т ок  ________________________________________________________  77 

 12: 

12.1. 

е 

п к  ________________________________________________________________________  59  у кто   _____________________________________________________________________  60 

11.1.  Кл 11.1.1. 

л

ел __________________________________________________________ 55 

л

тел т

 10: 

10.1. 

 

 ______________________________________________________ 33 

 _________________________________________________________________ 34 

Ко ол

6.2. 

л

о

ект ________________________________________________________________ 33 

5.10.  GDI о

л

 _______________________________________________________________ 31    е о  дете  ______________________________________________  32 

ле

Кл кт  о

 13: 

   о

ект  _______________________________________________ 79 

екто   ___________________________________________________________ 80 

Giuseppe Peano __________________________________________________ 82 

13.1. 

е еп

13.2. 

еку

 

к  ________________________________________________________ 82 

  _________________________________________________________________ 85 



13.3.  К

  е

о  _____________________________________________________________ 86 

13.4.  Latino Sine Flexione _________________________________________________________ 87  е

13.5. 

л

 14: 

 _________________________________________________________________ 90 

те

L‐

  _____________________________________________________ 92 

14.1.  Кл

 draw ________________________________________________________________ 92 

14.2. 

е

 _________________________________________________________________ 94 

И

  __________________________________________________________ 95 

ект

е 

л

 15: 

15.1.  О

л

кт   ________________________________________________________ 100 

 16: 

 _____________________________________________________ 103 

16.1.  dopaint __________________________________________________________________ 103  16.2. 

п

ле

е т

е о   ____________________________________________________ 104 

16.3.  К к п о

л

 17: 

17.1. 

о

е

е

  ед кто  ___________________________________________ 106 

е   

у к  

ло   _____________________________________________ 107 

л

 18: 

л

 19: 

 __________________________________________________________ 111 

19.1.  О

к  т п  _____________________________________________________________ 111 

т  _______________________________________________________ 109 

19.2. 

е‐п о еду

19.3. 

еоп еделё

19.4. 

е о

л

20.3. 

 п о еду

е у ло

 ___________________________________________ 112 

. _________________________________________________ 113 

о оп едел т  т п _______________________________________________ 114 

е ед е  

 д

 д

 __________________________________________ 115   ___________________________________________________ 115 

 emails ______________________________________________________________ 117 

е ед е  

К

 д

  ____________________________________________________ 118 

    т т

 ________________________________________________ 120 

т к  ______________________________________________________________ 120 

21.1.   д

21.2. 

л о

ут

е ед е  

 21: 

21.3. 

 

ло  поток  ___________________________________________________________ 114 

20.2.  Кл

л

о

 20: 

20.1. 

 

от ет ___________________________________________________ 104 

ек то

19.5. 

 

 

е

 _____________________________________________________________ 120 

к  п о

о

  _______________________________________________ 121 

_____________________________________________________________ 122   



 1: . .

те  о д д

. . .

   

   Visual PrВlВg 

 пу то  п оект, к кото о у по

 

 GUI  

е до

  у к

о

л

о т .  

 

Этот   до ол о п о т.  е те ко ду  Project/New   п ел   д , к к пок о    .  . 1.2.  те к опку Create,   пе ед  1.1.  те ,  пол те д ло о ое ок о Project Settings к к     по т  ок о де е  п оект  ( . 1.3).  

у ок 1.1  о д

у ок 1.2 

 

е  о о о п оект  

т о к  п оект  

                                                               1

 

 Graphical User Interface – 

е к

 пол о тел к

 

те

е .  



у ок 1.3  е е о п оект  

. . .

   

 

л  то о,  то  отко п л о т  п о пок о    .  1.4.  л   пу к   п о по т  ок о, по о ее    о е ое 

у, 

 

е те ко ду Build/Build   п ел   д , к к    е те  Build/Execute    п ел   д ,      к е    . 1.5.  

у ок 1.4 

о к  п оект  

у ок 1.5  у тое п

. .

 

 

е

 

    то   л е пок

т, к к  пу к т  п

ло е

ло е

е 

е,   

од т    п пке plot1. 

 



 2:   то   л е 

   до

те  о

у к пу то у п оекту, кото

у ок 2.1  о

ле

 

 

  о д л     л е 1. 

е  о о о п ед ет  к де е у п оект  

у ок 2.2 о д

. .

 

е  о о   о

то   о д т   о у,  е те ко ду  File/New   п ел   д , к к    ле о  п ел  пу кт  Form    пол те д ло о ое ок о  Create Project Item к к  о о   о   –  query.  до то е те ,  то    по е т л   о у    ко е  де е о дет, е л     л  ко е о  к т ло    де е е п оект , п е де  е   т

 

. 2.1.  е те      . 2.2.  е    п оект .  Это  п о‐  File/New.  



Ко д     п ете  о у   о у, Visual Prolog IDE1 пок ет   д ло о ое ок о под  ‐ е   Form  Properties ( . 2.3).    о ете п т  у т о к  по у ол     то  д ло о о   ок е.    п отот п  о о   о , к к    . 2.4.  о ле д ло о о о ок  Form Properties, IDE пок ет    о ете  е т   е  п оу ол к   ок ,  дел  е о  е о о  ол е  п отот п .  то   дел т   то,  те  ко     е  п о  у лу  о    т те е о, к к   дел ете, ко д   ‐ е ете  е  о о о ок .  

у ок 2.3 Form Properties 

у ок 2.4 

е е

е 

е о  ок

 

                                                             1

 

 Visual Prolog Integrated Development Engine – 

те

о

  ед  

отк  Visual Prolog. 

10 

. .

 

 

: e.g. 

 File/New 

Ко д     пу к л   пу тое  п ло е е,  ,  ко ее  е о,  ет л   тот  кт,  то  пу кт  е   File/New откл е .  то   кл т  е о, д д   елк те по  етке де е  п оект  под  е   TaskMenu.mnu  ( .  2.5).  те ,  е те  де е о,  од ее     е   т   д ло о о о  ок   TaskMenu,   у е те  ло ку Disabled, от о у  к пу кту &New/tF7, к к    . 2.6.  

у ок 2.5 

ел   д  п

у ок 2.6  кл

 

е

ло е

е  ле е т  п

   де е е п оект  

ел   д

11 

 

. .

   

 

то  до т  код к пу кту  File/New,  те  к опко   , кото  отк оет ко тек т ое  е .  2.8, д д   елк те    

ко е , 

те к опку Add (о _

е т _

 

 

   CodeExpert 

  етке де е  п оект   TaskWindow.win п о   .  е те пу кт  Code Expert (  2.7). К к   

у те  по 

. 2.8),   д  

д   елк

те по  етке 

у ок 2.7  е е од    к пе т код  

Это отк оет тек то

  ед кто ,  о  леду

 

е то : 

clauses onFileNew(_Source, _MenuTag).

Отко п л

у те п о

у,  те  

е

те  тот 

е т т к: 

clauses onFileNew(W, _MenuTag) :X := query::new(W), X:show().

Отко п л пу т те п о

. .

пол е

 

у те п о у,     у

у  о ,  д те,  то, ко д  

 

. 1.4.  ‐  пу кт  Build/Build   п ел   д , к к      ете File/New,  о д ет   о   о .  

е     то   л е пок ет, к к  о д т   о у   о е  д ло о о о ок  Create Project Items. 

у 

о о  пу кт   File/New,  те   ‐

12 

 

 

у ок 2.8 Dialog and Window Expert 

у ок 2.9  о л

 

  о

 

13 

 3: Mouse events    пе ё , кото

 д у   л   то о  доку е т ,    у л   ко п л о т   п ло е  по л ет , ко д     ете пу кт File/New    е   то о п ло е

. .

 

   

е    о . 

о    

 MouseDown 

те    етку де е  п оект   query.frm п о  к опко   ,  то отк оет ко тек т ое  е‐ .  е те пу кт  Code Expert, к к   дел л     . 2.8  дл   TaskWindow.win. О то о о,    .  2.8,    п е л   к пе т код   к  TaskWindow.win.  е     у о  п е т   е о  к  query.frm.    code expert д д   елк те    Mouse,  те     MouseDown.  ко е ,  те к опку  Add,   д ‐ д   елк те    етку   

  ледует  т

т   леду

 код   п о еду у onMouseDown/4: 

clauses onMouseDown(S, Point, _ShiftControlAlt, _Button):W=S:getVPIWindow(), Point=pnt(X,Y), Vpi::drawText(W, X, Y, “Hello, World!”).

Отко п л у те п о д   , ко д    

. .

ВБPaiБt 

  пол о л  о т  п о т , кото ко  под од о е  т уд оо .   Java л ое  о

у,    пу т те её.  ете    о у, п о

е  

те  File/New  то е ет    е  

  о д т   о у   о у. К ‐ е тое п ет т е.  

от к  о т   onMouseDown/4 то   о т   то‐ уд     о е.  е  е  т т  то  о о е   дее .  у е т у т  к , кото е дел т т ‐ у е т . Java од    т к   ко ,   о е  попул ,  е ду п о‐ е  ледует п о од т   ут   

public abstract void doPaint(java.awt.Graphics g)

 

14 

Ко е о,  то о е е  о о о о т ,   д е   Java.   л о   лу е, д од т   ё  о е  ут  о от ко   о т  onPaint/3.  1. о д те п оект    е е  plot0.   2. о те  о  п кет plotter к  е у, к к  ее.  3. т те  о у   о у query   plotter.  4. кл те пу кт п ел   д  File/New  5. о те  е т 

те 

у

 п о‐

clauses onFileNew(S, _MenuTag) :Q=query::new(S), Q:show().

к ProjTree/TaskWindow.win/Menu/TaskMenu/id_file/id_file_new.  леду    – до т   е т   class facts mousePoint:pnt := pnt(-1, -1). predicates onMouseDown : drawWindow::mouseDownListener. clauses onMouseDown(_S, Point, _ShiftControlAlt, _Button) :mousePoint := Point, Point=pnt(X,Y), R=rct(X-8, Y-8, X+60, Y+8), Invalidate(R).

е т  о от к  о т    query/Code Expert/Mouse/MouseDown→onMouseDown.    ото  п onPaint к  query.  onPaint  удет   к д   , ко д  п оу ол  о л т     о е  т о‐ т   у т е е   л   е е о .  Ко д   то  п о од т,  то  е т ,  ко д   о е е  т о т   е‐ е ? Ко д  ок о  т о  л  пол о т  пе ек то д у  ок о ,  л  ко д    дел ете е о  е‐ де т тел    по о  п ед к т  invalidate(R),  де R – п оу ол к.  оу ол к оп ‐ ет  коо д т  е о  е е о ле о о    е о п о о у ло .  R=rct(X-8, Y-8, X+60, Y+8)

  ет л ,  то  о от к  о у  о л т   ок у   е т   ел к   т .  од ко е , до те  е т 

т

  onMouseDown/4  дел ет  еде т тел  п оу ол ‐ . О от к  о т   onPaint  удет  от т     то  о л ‐

clauses onPaint(_Source, _Rectangle, GDIObject) :pnt(X, Y)=mousePoint, X>0, !, mousePoint:= pnt(-1, -1), GDIObject:drawText(X, Y, “Hello, World!”, -1). onPaint(_Source, _Rectangle, _GDIObject).

к  query/Window/Paint→onPaint.  Этот  о   под од  пот е ует  от    по тел   к,  поло е  по т , т к , к к от е е е (тот  о кл е  е поко те  пок  о   т  по т .    е  у те    ое  е . 

. .

к опко    

 

е

 

    то   л е  пок . 

т,  к к  о

т

т   о

т

 

  о е т   о‐  по ле X>0)    кт . 

,  т к е,  к к  ел ок  ле о  

 

15 

 4:

 

о  то о,  к к  д т  д л о    о е . 

то

. .

е,  д

 

те 

  де   по о   оп

т  

  п оект,  е  оп

  по‐

 

ел   д , пок     . 1.1   1.4,  то  л ое  е  Visual Prolog IDE.  п   A/B от о‐ т  к од о у   её пу кто .  п е ,    пол уете ко ду  Project/New дл   о д   о о о  п оект  ( . 1.1). О о [д ло о ое ок о  о д   о о о п оект  – п . пе .]  еет  е т   о ,    е о:  General, Directories, Build Options, Version Information, File Templates    Run Options.    ол т е  лу‐ е ,   пот е ует   пол т  тол ко  о у General.  General Project Name: plot2 UI Strategy: Object-oriented GUI (pfc/gui) Target Type: Exe Base Directory: E:\VIP7\Tyros

Ко д     дете  , ук :  С    GUI  : plot2 (  1.1.1).    ледует  о т    д ло о ое ок о  Project Settings (  пу кт  Project/New   п ел   д   1 VDE )    пол т   о у  General к к ук е   о  е.  дел те  то mutatis mudandis2, т к к к    ко п те е  о ет  е  т  д к  E,  л     о ете  отет   т    п о    п пке, отл ‐ е  от E:\VIP70\tyros. 

. .

 

 

  лё к   по о   о е т о т   ле е т   е е  п оект :  

у

   

л     е у

  то  елк т  

ко   по  оот ет т‐

л    д д   ёлк ете по п пке, о  отк оет    ото т  ое  оде ое.  л     ёлк‐ ете по  ле е ту п о  к опко   , отк оет  ко тек т ое  е , к к    у ке.  л     о у,  то     л     к пе т код    до л   е т код    TaskWindow.win,    к у:  В    ,       TaskWiБdВК/TaskWiБdВК.КiБ (  2.3)  то   пол т   то ук е, отп л те    де е о п оект     дел те  леду ее:  1. д   елк те по п пке TaskWindow,  то  отк т  её, е л  о   к т .  2. елк те  п о   к опко     по  етке  де е   п оект   TaskWindow.win,  то   к т   ко тек т ое  е ,   кото о   удут  леду е пу кт :                                                               1 2

 

 Visual Development Environment –   л т.  е  то,  то  ледует  е

у л   ед   т ;  е   ео од

отк   е  е е



16 

Edit Attribute Delete Code Expert

3.

ко е , 

е

те пу кт Code Expert 

. . . CВde EЛГert 

Эк пе т код  то е 

еет  о

у де е . 

оот ет т у   ,  к пе т  код   пол ует   дл   т к   код   о  о е  л   п оект .  то  до т  до  к пе т  код ,   дол   елк ут  п о  к опко    по  ле е ту де е   п оект , к кото о у    от те до т  код.  те ,  е те пу кт  Code Expert   ко тек т о о  е‐ .  то  пе е е т  по де е у  к пе т  код    до т  до то ек, куд     ел ете  т т   код,  елк те  по  у   етк   де е .  л     от те,  то   к пе т  код   до л  п отот п  к  «л тку»  де е ,  те    тот  л ток    те   те    к опку  Add,  кото   по т   у  д ло о о о ок .  те  д д   елк те по л тку  о ,  то  пе е т  к коду.  л    поп о у: В  Э      (  2.3):  clauses onFileNew(W, _MenuTag) :S=query::new(W), S:show().

  TaskWindow.win/Code Expert/Menu/TaskMenu/id_file/id_file_new,  от  , кото    дол   ле‐ до т :  • Де е о п оект  – Отк о те п пку  TaskWindow де е  п оект ,  елк те п о  к оп‐ е те  пу кт  ко     по  TaskWindow.win,  то   отк т   е о  ко тек т ое  е ,    Code Expert ( . 2.7).  д   елк те    TaskMenu→д д   д   елк те    Menu→д • Эк пе т  код   –  е те  id_file_new    те к опку  Add дл   о д  код  п ото‐ елк те    id_file. 

 

17 



т п .  ко е ,  д д   елк 2.8    делу 2.3.  л: TaskWindow.pro –  о

те 

  id_file_new→onFileNew.  О

те т е уе

е т

у те   по 

.  2.7, 

 код: 

clauses onFileNew(W, _MenuTag) :S=query::new(W), S:show().

. .

 

 

 

л  до ле   о о о  ле е т  к де е у п оект   е те ко ду  File/New   п ел   д .  лед те   те ,  то   е т   о д е е  ле е т     у  п пк .  е   о о  т     . 2.2   2.3.  от к к   поп о у    о д т  п кет   до т  к  е у  о у:  • До т   о  п кет к де е у п оект :  plot2/plotter.  е, е л     от те,  то  п кет  пол л    ко е о  к т ло е,  е  пол те поле  parent directory, к к    . 4.1. Од     по о о   т    пу то о  од тел ко о к т ло  –  т  ко е   де е  п оект  до то о, к к  т  File/New, к к пок о    . 2.1. 

у ок 4.1  о д



е ко о о п кет  

о д т   о у   о у:  plotter/query ( дел 2.1).  о д те  о у:  query.  о е т те  query   п кет  plotter.  то  по е т т  ок о  ут  п кет , у ед те ,  то   п пк   п кет ,  до  то о,  к к  отп л т     File/New.  те  е ,  кото е  то‐то  т.  п е , е л  п кет  т д ,  о те е о  plots1; е л  о   т ко п те ‐ у   ку,    о ете  т     оде  canvasFolder; е л  о   оде т  п о ,  о‐ т  о  дл   пол е ,  то portfolio;  о   е е   удет queryForms; е л  о   оде  т. д.  Ко д     о д ете  о у,  IDE  пок ет  д ло о ое  ок о  Form  Attributes,  кото ое    о ете  п т   е   е е .  о ле д ло о о о ок   Form Attributes, IDE пок ет д ло о ое ок о  Form  Window ( .  . 4.2).    о ете  о пол о т   о о о т   е т   е  ок    до т   т оку  од  ( е:  edit_ctl)   к опку, к к пок о    у ке.   т к е  о ете до т    п о  к опко    по  е   о    де е е п оект ,  до д ло о о о ок   Form Window,     пу кт Edit   по е о   е .                                                               1

 

 

л. Г

к,  е тё , д



18 

у окк 4.2  о

. .

 

  о  о т око   од д  



л    д д   ёлк етее по  ProjectT Tree/TaskMeenu.mnu,    полу те д д ло о ое о ок о  оде  то‐ о, кото ое  ло по ок о    . 2.6.    о ете  е ут  дее е о  то   пе к   е   ел‐ к  по ее о  етк , кк к  о о ло л   ее.   т к е  о ет по до т   ккл т  к ко к ‐л о пу кт    ле е т  е , к кк пок е , кк к    дел ле 2.2.  к е  е о о о  о о д т   о о    . 4.2,  де    л  к опку (( ко ку) под л  д  е  New Item    о д л пу кт Drawingg Tools,  по ол  д ло о о‐  пу кт  о д ет   ое ок о. К к    о ете у дет д     у к ,  о л о  кл е .  ‐ ол &    п  &Filee о о е ет F к к  о у  кл у.  

л

. .

 



те  е   о  п оект    ул , , то  по от ет ,  то о    о е   дел т     е е т о  к т ок   п о е т ,  то л    оп е  п оектт Visual Prolog.  • о д те  т о  G GUI п оект:: factorial l ( дел 1.1.1).   

  ко‐

1 19 

• •

• •

До о д

те  о  п кет к де е у п оект : factorial/forms.  те  о у   о у:  forms/query  ( дел  4.3).  о те  edit  field  [ т оку  од ]  (   е  edit_ctl)   к опку (   е  factorial_ctl)    её, к к    . 4.2.  кл те пу кт TaskMenu File/New ( дел 2.2).  Отко п л у те п ло е е,  те  до те ( дел 2.3): 

clauses onFileNew(W, _MenuTag) :S=query::new(W), S:show().

к TaskWindow.win/Menu/TaskMenu/id_file→id_file_new→onFileNew. 

. .

то   о д т   о  кл е те пу кт  File/New   п о: 

де

 

 

 

    ло т  е о   п кет forms,  е те п пку forms   де е е п оект     ел   д  VDE.  ед те ,  то у л   ло ку  Create Objects, к к пок ‐

Ко д     ёте к опку  Create, Visual Prolog п едо т т п отот п кл  fn.    д  – до т   у к о

т    л   fn.pro    fn.cl, кото е  о‐ л о т  к  т   л .  е    fn.cl: 

class fn open core predicates classInfo : core::classInfo. setVal : (string) procedure. calculate : () procedure. end class fn

 

ке о

ект о‐о

е т

о

о о п о о ,  л  fn.cl  оде т  те е   е‐ тодо   setVal:(string) procedure    calculate:().  О   о ует  п едпол е   пол о‐ теле  о то ,  то  етод  setVal/1  то п о еду  (о   то  по е),   т е ует од   у е т, кото‐  дол е   т   т око ; о  т к е  о о т,  то  етод calculate/0  е  еет  у е то .   д у о   то о ,  л fn.pro  оде т оп еделе е о е  п о еду .  % fn.pro implement fn open core

 

20 

constants className = “forms/fn”. classVersion = “”. class facts nVal:integer := 0. class predicates fact:(integer, integer) procedure (i,o). clauses classInfo(className, classVersion). setVal(X) :nVal:=toterm(X), stdio::write(“fact(“, nVal, “)=”). fact(0,1) :- !. fact(N, N*F) :fact(N-1, F). calculate() :fact(nVal, F), stdio::write(F, “\n”). end implement fn

леду     –  т   п ед к т  setVal/1,  ко д   пол о тел   едёт  то‐ уд     т оку  од . Отп л те    де е о п оект    п е те  к пе т код  к  query.frm.  л     е по те,  к к  то дел т , п о т те  дел 3.1  о о.    к пе те код  отк о те п пку  Control/edit_ctl (д д   елк у     е ),  елк те    LoseFocus,    те к опку  Add,  то   о д т  п отот п код .  ‐ те  леду   е т код :  д   елк те   LoseFocus→onEditLoseFocus,   до predicates onEditLoseFocus : window::loseFocusListener. clauses onEditLoseFocus(S) :fn::setVal(S:getText()).

Ко д   у   к  п о о ,  т е ует   е ,  то   п к ут   к  о   по т .  о то у,  е п т те ,   д   о е т, по т  к ду  дет л  п о , кото е    дёте    то   уко од т е.  о л о Э опу, о едо ле о т  п о т  е  по е.   л о   лу е, д те  к т е п о де  по  е , кото е  у о  по т .    Visual  Prolog  е т   кл     о ект ,  п дле е  кл .  О ект  еет  о   етодо ,  кото е  л т   п о ,  кото е  от т    о екто .  О   т к е  т   event  driven  predicates – д е  о т  п ед к т .  л    по т те ку о     т оку  од , о  полу т  оку .  т ок   од  поте ет  оку , е л    о т те  ое  е   д у о  о ект,  п е ,  к опку.  е т  clauses onEditLoseFocus(S) :fn::setVal(S:getText()).

л

т,  то,  е л   т ок   од   ко д ‐ уд   поте ет  оку ,  о   дол   т   етод  S:getText(),  то  полу т   т оку, кото у   ел пол о тел ,   пе ед т  её    fn::setVal(X),  де о   удет  ок е  до  ело о  л :  setVal(X) :nVal:=toterm(X).

 

21 

setVal/1  о т  елое  к пе т код  к query.frm. Отп

ло    кте‐пе е е о   nVal.  леду л те    де е о п оект    до те 

 

 –  е т 

о  п

е

т  

clauses onFactorial(_Source) = button::defaultAction() :fn::calculate().

к  query.frm/Code  Expert/Control/factorial_ctl→onFactorial.  ко е ,  отко п л у те  п оект    ‐ пу т те  п о у.  л     е  по те  к к  ко п л о т     пу к т   п о у,  л те    ко т  о   о .  е те  ло  дел 1.1.2.    о о  п ло е   е те пу кт  File/New.    т оке  од     те   к опку factorial. Кл  fn  п ет  кто л   ок е  оо е .  

. .

 

 

 

олу т   оде ое  т ок   од   до ол о  уд е о.  Это  е о  дл   Visual  C,  Delphi,  OCAML,  Clean,   п . О е  Visual Prolog,   дол е   к т ,  то о  п едл ет   ле к  до туп к  ле‐ е т  уп ле , по  е    о т л   к .  от  о   е  о  уд е .    у л   по о  полу т  до туп к  оде о у  т ок   од :  т  е о ок о, ко д  о о по‐ те ет  оку ,  те   пол о т   то ок о дл  до туп  к е о  оде о у, кото ое    о ете  ‐ пол о т  дл  д л е   ле .    удете  д  у т ,  то Visual Prolog  т ок о    к‐ те‐пе е е о  дл   .  ледо тел о,    е т е ует   т     оку о .  о д те  о  GUI п оект: fact2 ( дел 1.1.1).  • те  о  п кет к де е у п оект : fact2/forms ( дел 4.3).  • До • о д те  о у   о у: forms/query ( дел 4.3).  о те    её  т оку  од  (   ‐ е  edit_ctl)   к опку (   е  factorial_ctl), к к    . 4.2.  кл те  пу кт  п ел   д   File/New ( дел 2.2). Отко п л у те п о у,  то‐ •   кл т   о у query   п оект.    к пе те код  до те ( дел 2.3):  • clauses onFileNew(W, _MenuTag) :S=query::new(W), S:show().

к TaskWindow.win/Menu/TaskMenu/id_file→id_file_new→onFileNew.  о те  е т  clauses onFactorial(_S)=button::defaultAtcion() :-

 

22 

fn::calculate(edit_ctl:getText()).

к query.frm/Code Expert/Control/factorial_ctl→onFactorial.  о д те кл   fn  ут   forms.  е те  ло ку  Creates Objects. От ед кт fn.pro к к пок о  е. 

у те 

л   fn.cl   

%File: fn.cl class fn   open core predicates   classInfo : core::classInfo.   calculate:(string) procedure. end class fn % File fn.pro implement fn  open core constants   className = "forms/fn".   classVersion = "". class predicates   fact:(integer, integer) procedure (i,o). clauses   classInfo(className, classVersion).   fact(0, 1) :- !.   fact(N, N*F) :- fact(N-1, F).   calculate(X) :- N= toterm(X),     fact(N, F), stdio::write(F, "\n"). end implement fn

Отко п л у те    пу т те п о лек ет     т ок   од   пол о ее. 

. .

 

у, к к    ее.    то   о о   е  п о е   етод   edit_ctl:getText(),  то  о

  то   л е т  п е :  plot2 пок ет, к к  о д л ет  кто л; fact2 то е  л ет  кто л.     

 

т   о

у   к опк

, тек т  ‐ до  п о е,  е  

   пол

;  factorial 

23 

 5: . .

я 

 

 

 у е е ,  то    ете,  то т кое  у к .  о о о,    е  ете  те т е ко о оп еделе‐   у к ,  о    еете п ед т ле е о  у к , полу е ое  пол о е  к л кул то о     ко п те  п о   л   по е е е   ку о   ле е т о   ле .  у к   еет  у кто ,  кото   л ет   е е   у к ,    у е т .  п е : sin(X) –  у к .  у о  п е   у к‐  – mod(X, Y), кото   о ет о т ток от деле . Ко д     от те  пол о т   у к ,    под т л ете по то е  е   е то пе е е ,  л   у е то .  п е , е л     от те  т  о т ток от 13, делё о о   2,    о ете  т  mod(13, 2)    е  к л кул то е (е л  о   еет  ту  у к , ко е о  е).  л     от те  у  30°,    о ете  т  sin(30).  о о  к т ,  то  у к   то  ото е   о о   е   у е т     е е    о е т   е ул т то   ле .  о е о   ет   о е т о  о о   е   у е ‐ т .  о е т о  е ул т то   ле   ет   о о .    лу е  у к   у ,  ле е т   1 до е   л т  де т тел е  л   е ду 0    2π   д  ( л  0°   360°) .  т  од   е , кото‐ у   ледует  по т .  те т к   т т,  то  у к  дол   о т  тол ко од о  ‐ е е дл  к до о  д о о  у е т .  к  о о , е л   ле е п о од т  ол ее ко‐ л

е т о  е , о о  е  л ет   у к е .  п е ,  4   о ет  т  2  л  ‐22.  о д , к д 3  ко е   л   е  л ет   у к е .  то  ет  у к   е кол к   у е то ?  п е ,  у к   max(X,  Y)  п ет  д   е т ,    о ет  ол     .    то   лу е,    о ете  т т ,  то  о   еет  тол од   у е т, кото   л ет  п о   е .  к,  у е то  max(5, 2)  л ет  п  (5, 2).  те т к   о о т,  то до е  подо о   у к  – дек то о п о еде е R×R.  т   у к ,  е   у кто   пол ет   е ду  у е т . Это п е о    лу е  т е к  опе то о ,  де п ут 5+7  е то +(5, 7). 

. .

т‐ у‐ ко  ‐ е‐

 

ед к т   то  у к ,   о о   л ет   о е т о  {verum, falsum},  л , е л     е  т   л т к е  ,  пол уе е    ло ке,    е д   о ете  пол т     л к   к ле т:  {true, false}.  т   е кол ко  п ед к то ,  е т   л о у,  кто  п ло л  уку  к  п о о ,  л  д е  туде ту, по е е у лек   ле е т о   ле .  от о :  X>Y  о X2) && (X2) && (X2) && (X2, X