Node:Example 2 - Train, Next:Example 3 - Queens, Previous:Example 1 - Calculator, Up:Examples
This example provides a Visual Basic user interface to the Prolog program finding train routes between two points.
The Visual Basic program train
contains the following form window:
Clicking the cmdRun
command button will display all the available routes
between Stockholm and Orebro. These are calculated as
solutions of the Prolog query
places('Stockholm','Orebro',Way)
. For each solution,
the value assigned to the variable Way
is retrieved into the Visual Basic variable result
and is inserted as a new item into the listConnection
listbox.
The Visual Basic program consists of four parts:
Private Sub cmdRun_Click() Dim qid As Long Dim result As String Dim s As String Dim rc As Integer qid = -1 ' make it safe to PrologCloseQuery(qid) in Err: 'load the train.pl Prolog file rc = PrologQueryCutFail("ensure_loaded(app(train))") If rc < 1 Then Msg = "ensure_loaded(train)" GoTo Err End If 'open the query qid = PrologOpenQuery("places('Stockholm','Orebro',Way)") If qid = -1 Then rc = 0 Msg = "Open places/3" GoTo Err End If 'generate solutions Do rc = PrologNextSolution(qid) If rc = 0 Then Exit Do ' failed If rc < 0 Then Msg = "places/3" GoTo Err End If If PrologGetString(qid, "Way", result) < 1 Then rc = 0 Msg = "PrologGetString Way" GoTo Err End If listConnections.AddItem result Loop While True 'after all solutions are found, the query is closed Call PrologCloseQuery(qid) Exit Sub
Note that each part does elaborate error checking and passes
control to the error display instructions shown below:
Err: Call PrologCloseQuery(qid) ' Always close opened queries 'error message is prepared, adding either the - failed - or 'the - raised exception - suffix to the Msg string specific 'to the function called If rc = 0 Then Msg = Msg + " failed" Else Call PrologGetException(s) Msg = Msg + " raised exception: " + s End If MsgBox Msg, 48, "Error" End Sub
The Prolog predicate places
is defined in the train.pl
file, as shown earlier (see Train)