242 34 3MB
Russian Pages 122 Year 2007
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 ( п ок пол о тек те те о ), о ко е.
2
К д ел оп т о е у к т т , кото е ол е к т, е пок т кл д то . п е , е ‐ о , к де Л пл (PierreSimon, 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
Ко
е т
пе е од
ед ло
е ________________________________________________________________ 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
5
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
6
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 –
е к
пол о тел к
те
е .
7
у ок 1.3 е е о п оект
. . .
л то о, то отко п л о т п о пок о . 1.4. л пу к п о по т ок о, по о ее о е ое
у,
е те ко ду Build/Build п ел д , к к е те Build/Execute п ел д , к е . 1.5.
у ок 1.4
о к п оект
у ок 1.5 у тое п
. .
е
то л е пок
т, к к пу к т п
ло е
ло е
е
е,
од т п пке plot1.
8
2: то л е
до
те о
у к пу то у п оекту, кото
у ок 2.1 о
ле
о д л л е 1.
е о о о п ед ет к де е у п оект
у ок 2.2 о д
. .
е о о о
то о д т о у, е те ко ду File/New п ел д , к к ле о п ел пу кт Form пол те д ло о ое ок о Create Project Item к к о о о – query. до то е те , то по е т л о у ко е де е о дет, е л л ко е о к т ло де е е п оект , п е де е т
. 2.1. е те . 2.2. е п оект . Это п о‐ File/New.
9
Ко д п ете о у о у, 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