Примеры использования PL-объектов

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
 
__FORCETOC__
 
__FORCETOC__
 
см. [[SWI-Prolog|Система логического программирования на встроенном SWI‑Prolog]]
 
см. [[SWI-Prolog|Система логического программирования на встроенном SWI‑Prolog]]
== pl_Examples ==
+
== [https://github.com/GoldenSoftwareLtd/gedemin-prolog/blob/master/vbs/pl_Examples.vbs pl_Examples] ==
 
<syntaxhighlight enclose="div" line lang="vb" highlight="3,44,78,121,172,212,291,377,473">
 
<syntaxhighlight enclose="div" line lang="vb" highlight="3,44,78,121,172,212,291,377,473">
 
Option Explicit
 
Option Explicit
Строка 731: Строка 731:
 
%%%%
 
%%%%
 
</syntaxhighlight>
 
</syntaxhighlight>
== pl_Examples_Script ==
+
== [https://github.com/GoldenSoftwareLtd/gedemin-prolog/blob/master/gd_pl/test/pl_Examples_Script.pl pl_Examples_Script] ==
 
<syntaxhighlight enclose="div" line lang="visualprolog" highlight="">
 
<syntaxhighlight enclose="div" line lang="visualprolog" highlight="">
 
% Примеры использования PL-объектов
 
% Примеры использования PL-объектов

Версия 17:12, 2 июля 2015

см. Система логического программирования на встроенном SWI‑Prolog

Содержание

pl_Examples

  1. Option Explicit
  2.  
  3. Sub pl_Examples()
  4.   Dim Title, Msg, Ret
  5.   Title = "Гедымин - Пролог"
  6.   Msg = _
  7.         "/* Примеры использования PL-объектов */" & vbCrLf & vbCrLf & _
  8.         "%%%%" & vbCrLf & _
  9.         "%    pl_Examples" & vbCrLf & _
  10.         "%      TgsPLClient: Initialise, IsInitialised"
  11.  
  12.   Dim PL
  13.   Set PL = Designer.CreateObject(nil, "TgsPLClient", "")
  14.   If Not PL.IsInitialised Then
  15.     If Not PL.Initialise("") Then
  16.       Msg = "Ошибка инициализации SWI-Prolog!"
  17.       Call MsgBox(Msg, vbCritical + vbOkOnly, Title)
  18.       PL.DestroyObject
  19.       Exit Sub
  20.     End If
  21.   End If
  22.  
  23.   Dim FuncIndex, FuncName, FuncBegin, FuncEnd
  24.   FuncName = "pl_Example"
  25.   FuncBegin = 1
  26.   FuncEnd = 8
  27.   For FuncIndex = FuncBegin To FuncEnd
  28.     PL.Debug = False
  29.     Msg = Msg & vbCrLf & _
  30.           Eval(FuncName & FuncIndex & "(PL)")
  31.   Next
  32.   Msg = Msg & vbCrLf & "%%%%"
  33.   PL.DestroyObject
  34.  
  35.   Dim frmMsg, Creator
  36.   Set Creator = New TCreator
  37.   Set frmMsg = Creator.GetObject(nil, "usrf_Msg", "")
  38.  
  39.   frmMsg.Caption = Title
  40.   frmMsg.GetComponent("usrg_Msg").Lines.Text = Msg
  41.   frmMsg.ShowModal
  42. End Sub
  43.  
  44. Function pl_Example1(ByRef PL)
  45.   Dim Title, Msg
  46.   Title = vbCrLf & _
  47.           "%%" & vbCrLf & _
  48.           "% 1. pl_Example1(PL)" & vbCrLf & _
  49.           "%      TgsPLClient: Call" & vbCrLf & _
  50.           "%      TgsPLTermv: PutAtom, ToString"
  51.  
  52.   pl_Example1 = ""
  53.  
  54.   Dim PredicateName, Params
  55.   PredicateName = "current_prolog_flag"
  56.   Set Params = Designer.CreateObject(2, "TgsPLTermv", "")
  57.   Params.PutAtom 0, "executable"
  58.  
  59.   Msg = _
  60.     "% Запрос" & vbCrLf & _
  61.     "?- " & PredicateName & "(" & Params.ToString(0) & ", AppPath)."
  62.  
  63.   If PL.Call(PredicateName, Params) Then
  64.     Dim AppPath
  65.     AppPath = Params.ToString(1)
  66.     Msg = Msg & vbCrLf & _
  67.       "AppPath = " & AppPath & "."
  68.   Else
  69.     Msg = Msg & vbCrLf & "false."
  70.   End If
  71.  
  72.  
  73.   pl_Example1 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  74.  
  75.   Params.DestroyObject
  76. End Function
  77.  
  78. Function pl_Example2(ByRef PL)
  79.   Dim Title, Msg
  80.   Title = vbCrLf & _
  81.           "%%" & vbCrLf & _
  82.           "% 2. pl_Example2(PL)" & vbCrLf & _
  83.           "%      TgsPLClient: Call2, Call" & vbCrLf & _
  84.           "%      TgsPLTermv: PutAtom, ToString"
  85.  
  86.   pl_Example2 = ""
  87.  
  88.   Dim Code
  89.   Code = "assertz( pl_Example(pl_Example2, 'Пример 2') )"
  90.   Msg = _
  91.     "% Выполнение кода" & vbCrLf & _
  92.     "?- " & Code & "."
  93.  
  94.   If PL.Call2(Code) Then
  95.     Msg = Msg & vbCrLf & "true."
  96.   Else
  97.     Msg = Msg & vbCrLf & "false."
  98.   End If
  99.  
  100.   Dim PredicateName, Params
  101.   PredicateName = "pl_Example"
  102.   Set Params = Designer.CreateObject(2, "TgsPLTermv", "")
  103.   Params.PutAtom 0, "pl_Example2"
  104.  
  105.   Msg = Msg & vbCrLf & _
  106.     "% Запрос" & vbCrLf & _
  107.     "?- " & PredicateName & "(" & Params.ToString(0) & ", Text)."
  108.  
  109.   If PL.Call(PredicateName, Params) Then
  110.     Msg = Msg & vbCrLf & _
  111.       "Text = " & Params.ToString(1) & "."
  112.   Else
  113.     Msg = Msg & vbCrLf & "false."
  114.   End If
  115.  
  116.   pl_Example2 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  117.  
  118.   Params.DestroyObject
  119. End Function
  120.  
  121. Function pl_Example3(ByRef PL)
  122.   Dim Title, Msg
  123.   Title = vbCrLf & _
  124.           "%%" & vbCrLf & _
  125.           "% 3. pl_Example3(PL)" & vbCrLf & _
  126.           "%      TgsPLClient: Compound, Term, Call" & vbCrLf & _
  127.           "%      TgsPLTermv: PutAtom, ToString"
  128.  
  129.   pl_Example3 = ""
  130.  
  131.   Dim Goal, Functor, Termv
  132.   Set Goal = Designer.CreateObject(1, "TgsPLTermv", "")
  133.   Functor = "pl_Example"
  134.   Set Termv = Designer.CreateObject(2, "TgsPLTermv", "")
  135.   Termv.PutAtom 0, "pl_Example3"
  136.   Termv.PutAtom 1, "Пример 3"
  137.   Call PL.Compound(Goal.Term(0), Functor, Termv)
  138.  
  139.   Dim Code
  140.   Code = "assertz"
  141.   Msg = _
  142.     "% Выполнение кода" & vbCrLf & _
  143.     "?- " & Code & "( " & Goal.ToString(0) & " )."
  144.  
  145.   If PL.Call(Code, Goal) Then
  146.     Msg = Msg & vbCrLf & "true."
  147.   Else
  148.     Msg = Msg & vbCrLf & "false."
  149.   End If
  150.  
  151.   Dim PredicateName, Params
  152.   PredicateName = "pl_Example"
  153.   Set Params = Designer.CreateObject(2, "TgsPLTermv", "")
  154.   Params.PutAtom 0, "pl_Example3"
  155.  
  156.   If PL.Call(PredicateName, Params) Then
  157.     Msg = Msg & vbCrLf & _
  158.       "% Запрос" & vbCrLf & _
  159.       "?- " & PredicateName & "(" & Params.ToString(0) & ", Text)." & vbCrLf & _
  160.       "Text = " & Params.ToString(1) & "."
  161.   Else
  162.     Msg = Msg & vbCrLf & "false."
  163.   End If
  164.  
  165.   pl_Example3 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  166.  
  167.   Termv.DestroyObject
  168.   Goal.DestroyObject
  169.   Params.DestroyObject
  170. End Function
  171.  
  172. Function pl_Example4(ByRef PL)
  173.   Dim Title, Msg
  174.   Title = vbCrLf & _
  175.           "%%" & vbCrLf & _
  176.           "% 4. pl_Example4(PL)" & vbCrLf & _
  177.           "%      TgsPLClient: LoadScriptByName, Call" & vbCrLf & _
  178.           "%      TgsPLTermv: ToString"
  179.  
  180.   pl_Example4 = ""
  181.  
  182.   Dim ScriptName
  183.   ScriptName = "pl_Examples_Script"
  184.  
  185.   PL.Debug = True
  186.   If Not PL.LoadScriptByName(ScriptName) Then
  187.     PL.Debug = False
  188.     Exit Function
  189.   End If
  190.   PL.Debug = False
  191.  
  192.   Dim PredicateName, Params
  193.   PredicateName = "hello_world"
  194.   Set Params = Designer.CreateObject(1, "TgsPLTermv", "")
  195.  
  196.   Msg = _
  197.     "% Запрос" & vbCrLf & _
  198.     "?- " & PredicateName & "(Hello)."
  199.  
  200.   If PL.Call(PredicateName, Params) Then
  201.     Msg = Msg & vbCrLf & _
  202.       "Hello = " & Params.ToString(0) & "."
  203.   Else
  204.     Msg = Msg & vbCrLf & "false."
  205.   End If
  206.  
  207.   pl_Example4 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  208.  
  209.   Params.DestroyObject
  210. End Function
  211.  
  212. Function pl_Example5(ByRef PL)
  213.   Dim Title, Msg
  214.   Title = vbCrLf & _
  215.           "%%" & vbCrLf & _
  216.           "% 5. pl_Example5(PL)" & vbCrLf & _
  217.           "%      TgsPLClient: Debug, LoadScriptByName" & vbCrLf & _
  218.           "%      TgsPLTermv: ToString" & vbCrLf & _
  219.           "%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close, Cut"
  220.  
  221.   pl_Example5 = ""
  222.  
  223.   Dim ScriptName
  224.   ScriptName = "pl_Examples_Script"
  225.  
  226.   PL.Debug = True
  227.   If Not PL.LoadScriptByName(ScriptName) Then
  228.     PL.Debug = False
  229.     Exit Function
  230.   End If
  231.   PL.Debug = False
  232.  
  233.   Dim Params
  234.   Set Params = Designer.CreateObject(1, "TgsPLTermv", "")
  235.   Dim PredicateName, Query
  236.   PredicateName = "hello_world"
  237.   Set Query = Designer.CreateObject(nil, "TgsPLQuery", "")
  238.   Query.PredicateName = PredicateName
  239.   Query.Termv = Params
  240.   Query.OpenQuery
  241.  
  242.   Msg = _
  243.     "% Запрос" & vbCrLf & _
  244.     "?- " & PredicateName & "(Hello)."
  245.  
  246.   If Not Query.EOF Then
  247.     Do Until Query.EOF
  248.       Msg = Msg & vbCrLf & _
  249.         "Hello = " & Params.ToString(0)
  250.       Query.NextSolution
  251.       If Query.EOF Then
  252.         Msg = Msg & "."
  253.       Else
  254.         Msg = Msg & " ;"
  255.       End If
  256.     Loop
  257.   Else
  258.     Msg = Msg & vbCrLf & "false."
  259.   End If
  260.   Query.Close
  261.  
  262.   Msg = Msg & vbCrLf & _
  263.     "% Запрос" & vbCrLf & _
  264.     "?- " & PredicateName & "(Hello), !."
  265.  
  266.   Query.OpenQuery
  267.  
  268.   If Not Query.EOF Then
  269.     Do Until Query.EOF
  270.       Msg = Msg & vbCrLf & _
  271.         "Hello = " & Params.ToString(0)
  272.       Query.Cut
  273.       Query.NextSolution
  274.       If Query.EOF Then
  275.         Msg = Msg & "."
  276.       Else
  277.         Msg = Msg & " ;"
  278.       End If
  279.     Loop
  280.   Else
  281.     Msg = Msg & vbCrLf & "false."
  282.   End If
  283.   Query.Close
  284.  
  285.   pl_Example5 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  286.  
  287.   Query.DestroyObject
  288.   Params.DestroyObject
  289. End Function
  290.  
  291. Function pl_Example6(ByRef PL)
  292.   'TERM-TYPE CONSTANTS
  293.  
  294.   Const PL_VARIABLE = 1
  295.   Const PL_ATOM = 2
  296.   Const PL_INTEGER = 3
  297.   Const PL_FLOAT = 4
  298.   Const PL_STRING = 5
  299.   Const PL_TERM = 6
  300.  
  301.   Dim Title, Msg
  302.   Title = vbCrLf & _
  303.           "%%" & vbCrLf & _
  304.           "% 6. pl_Example6(PL)" & vbCrLf & _
  305.           "%      TgsPLClient: LoadScriptByName" & vbCrLf & _
  306.           "%      TgsPLTermv: DataType, ReadInteger, ReadAtom, ReadDate, ReadString" & vbCrLf & _
  307.           "%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close"
  308.  
  309.   pl_Example6 = ""
  310.  
  311.   Dim ScriptName
  312.   ScriptName = "pl_Examples_Script"
  313.  
  314.   PL.Debug = True
  315.   If Not PL.LoadScriptByName(ScriptName) Then
  316.     PL.Debug = False
  317.     Exit Function
  318.   End If
  319.   PL.Debug = False
  320.  
  321.   Dim Params
  322.   Set Params = Designer.CreateObject(2, "TgsPLTermv", "")
  323.  
  324.   Dim PredicateName, Query
  325.   Dim Arg1, Arg2
  326.   PredicateName = "some_fact"
  327.   Set Query = Designer.CreateObject(nil, "TgsPLQuery", "")
  328.   Query.PredicateName = PredicateName
  329.   Query.Termv = Params
  330.   Query.OpenQuery
  331.  
  332.   Msg = _
  333.     "% Запрос" & vbCrLf & _
  334.     "?- " & PredicateName & "(Arg1, Arg2)."
  335.  
  336.   Msg = Msg & vbCrLf & _
  337.     "% Обработка фактов"
  338.   If Not Query.EOF Then
  339.     Do Until Query.EOF
  340.       Select Case Params.DataType(0)
  341.         Case PL_INTEGER
  342.           Arg1 = Params.ReadInteger(0) & ": "
  343.         Case PL_ATOM
  344.           If IsDate(Params.ReadAtom(0)) Then
  345.             Arg1 = Year(Params.ReadDate(0)) & " - "
  346.           Else
  347.             Arg1 = ""
  348.           End If
  349.         Case Else
  350.           Arg1 = ""
  351.       End Select
  352.       If Not Arg1 = "" Then
  353.         Select Case Params.DataType(1)
  354.           Case PL_ATOM
  355.             Arg2 = Params.ReadAtom(1)
  356.           Case PL_STRING
  357.             Arg2 = Params.ReadString(1)
  358.           Case Else
  359.             Arg2 = ""
  360.         End Select
  361.         Msg = Msg & vbCrLf & _
  362.           "%   " & Arg1 & Arg2
  363.       End If
  364.       Query.NextSolution
  365.     Loop
  366.   Else
  367.     Msg = Msg & vbCrLf & "false."
  368.   End If
  369.   Query.Close
  370.  
  371.   pl_Example6 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  372.  
  373.   Query.DestroyObject
  374.   Params.DestroyObject
  375. End Function
  376.  
  377. Function pl_Example7(ByRef PL)
  378.   Dim Title, Msg
  379.   Title = vbCrLf & _
  380.           "%%" & vbCrLf & _
  381.           "% 7. pl_Example7(PL)" & vbCrLf & _
  382.           "%      TgsPLClient: LoadScriptByName, Debug, MakePredicatesOfSQLSelect" & vbCrLf & _
  383.           "%      TgsPLTermv: PutAtom, ReadString, PutString" & vbCrLf & _
  384.           "%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close"
  385.  
  386.   pl_Example7 = ""
  387.  
  388.   Dim ScriptName
  389.   ScriptName = "pl_Examples_Script"
  390.  
  391.   PL.Debug = True
  392.   If Not PL.LoadScriptByName(ScriptName) Then
  393.     PL.Debug = False
  394.     Exit Function
  395.   End If
  396.   PL.Debug = False
  397.  
  398.   Dim P_sql, Tv_sql, Q_sql
  399.   Dim FactName, SQL
  400.   P_sql = "gd_sql"
  401.   Set Tv_sql = Designer.CreateObject(2, "TgsPLTermv", "")
  402.   Set Q_sql = Designer.CreateObject(nil, "TgsPLQuery", "")
  403.   Q_sql.PredicateName = P_sql
  404.   Q_sql.Termv = Tv_sql
  405.   FactName = "gd_place"
  406.   Tv_sql.PutAtom 0, FactName
  407.   Q_sql.OpenQuery
  408.  
  409.   Msg = _
  410.     "% Запрос" & vbCrLf & _
  411.     "?- " & P_sql & "(" & FactName & ", SQL)."
  412.  
  413.   Dim Ret
  414.  
  415.   Msg = Msg & vbCrLf & _
  416.     "% Обработка фактов, наполнение базы знаний"
  417.   If Not Q_sql.EOF Then
  418.     Do Until Q_sql.EOF
  419.       SQL = Tv_sql.ReadString(1)
  420.       Msg = Msg & vbCrLf & _
  421.             "/*" & SQL & "*/" & vbCrLf
  422.  
  423.       PL.Debug = True
  424.       Ret = PL.MakePredicatesOfSQLSelect( _
  425.               SQL, _
  426.               gdcBaseManager.ReadTransaction, _
  427.               FactName, FactName, False)
  428.       PL.Debug = False
  429.  
  430.       Msg = Msg & _
  431.             "% Добавлено " & Ret & " фактов " & FactName
  432.       Q_sql.NextSolution
  433.     Loop
  434.   Else
  435.     Msg = Msg & vbCrLf & "false."
  436.   End If
  437.   Q_sql.Close
  438.   Q_sql.DestroyObject
  439.   Tv_sql.DestroyObject
  440.  
  441.   Dim P_info, Tv_info, Q_info
  442.   Dim PlaceNameIn, PlaceNameOut, PlaceTypeOut
  443.   P_info = "place_info"
  444.   Set Tv_info = Designer.CreateObject(3, "TgsPLTermv", "")
  445.   Set Q_info = Designer.CreateObject(nil, "TgsPLQuery", "")
  446.   Q_info.PredicateName = P_info
  447.   Q_info.Termv = Tv_info
  448.   PlaceNameIn = "Минск"
  449.   Tv_info.PutString 0, PlaceNameIn
  450.   Q_info.OpenQuery
  451.  
  452.   Msg = Msg & vbCrLf & _
  453.     "% Запрос" & vbCrLf & _
  454.     "?- " & P_info & "(""" & PlaceNameIn & """, PlaceNameOut, PlaceTypeOut)."
  455.   Msg = Msg & vbCrLf & _
  456.     "% Поиск решений"
  457.   If Not Q_info.EOF Then
  458.     Do Until Q_info.EOF
  459.       Msg = Msg & vbCrLf & _
  460.             "%   " & Tv_info.ReadString(1) & " (" & Tv_info.ReadString(2) & ")"
  461.       Q_info.NextSolution
  462.     Loop
  463.   Else
  464.     Msg = Msg & vbCrLf & "false."
  465.   End If
  466.   Q_info.Close
  467.   Q_info.DestroyObject
  468.   Tv_info.DestroyObject
  469.  
  470.   pl_Example7 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  471. End Function
  472.  
  473. Function pl_Example8(ByRef PL)
  474.   Dim Title, Msg
  475.   Title = vbCrLf & _
  476.           "%%" & vbCrLf & _
  477.           "% 8. pl_Example8(PL)" & vbCrLf & _
  478.           "%      TgsPLClient: LoadScriptByName, ExtractData, MakePredicatesOfDataSet" & vbCrLf & _
  479.           "%      TgsPLTermv: PutInteger, ReadInteger, ReadString" & vbCrLf & _
  480.           "%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close"
  481.  
  482.   pl_Example8 = ""
  483.  
  484.   Dim ScriptName
  485.   ScriptName = "pl_Examples_Script"
  486.   If Not PL.LoadScriptByName(ScriptName) Then
  487.     Exit Function
  488.   End If
  489.  
  490.   Dim P_rec, Tv_rec, RecNum
  491.   P_rec = "generate_some_rec"
  492.   Set Tv_rec = Designer.CreateObject(3, "TgsPLTermv", "")
  493.   RecNum = 8
  494.   Tv_rec.PutInteger 2, RecNum
  495.  
  496.   Msg = _
  497.     "% Запрос" & vbCrLf & _
  498.     "?- " & P_rec & "(ID, Name, " & RecNum & ")."
  499.  
  500.   Dim CDS
  501.   Set CDS = Designer.CreateObject(nil, "TClientDataset", "")
  502.   CDS.FieldDefs.Add "ID", ftInteger, 0, True
  503.   CDS.FieldDefs.Add "Name", ftString, 20, True
  504.   CDS.CreateDataSet
  505.   CDS.Open
  506.  
  507.   Msg = Msg & vbCrLf & _
  508.     "% Заполнение клиентского набора данных из Пролог-запроса"
  509.   Call PL.ExtractData(CDS, P_rec, Tv_rec)
  510.   Msg = Msg & vbCrLf & _
  511.     "% Добавлено записей: " & CDS.RecordCount
  512.  
  513.   If Not CDS.RecordCount = 0 Then
  514.     Msg = Msg & vbCrLf & _
  515.       "% Считывание клиентского набора данных"
  516.       Msg = Msg & vbCrLf & _
  517.             "%   ID   Name"
  518.     CDS.First
  519.     Do Until CDS.Eof
  520.       Msg = Msg & vbCrLf & _
  521.             "%   " & CDS.FieldByName("ID").AsInteger & _
  522.             "    " & CDS.FieldByName("Name").AsString
  523.       CDS.Next
  524.     Loop
  525.   End If
  526.   Tv_rec.DestroyObject
  527.  
  528.   Dim P_cds, Tv_cds, Q_cds
  529.   P_cds = "gd_some_rec"
  530.   Set Tv_cds = Designer.CreateObject(2, "TgsPLTermv", "")
  531.   Set Q_cds = Designer.CreateObject(nil, "TgsPLQuery", "")
  532.   Q_cds.PredicateName = P_cds
  533.   Q_cds.Termv = Tv_cds
  534.  
  535.   Dim I, DelCount
  536.   DelCount = 3
  537.   CDS.First
  538.   For I = 1 To DelCount
  539.     CDS.Delete
  540.   Next
  541.   Msg = Msg & vbCrLf & _
  542.     "% Удалено первых записей: " & DelCount
  543.  
  544.   Msg = Msg & vbCrLf & _
  545.     "% Наполнение базы знаний из клиентского набора данных"
  546.   Dim Ret
  547.  
  548.   PL.Debug = True
  549.   Ret = PL.MakePredicatesOfDataSet(CDS, "ID,Name", P_cds, P_cds, False)
  550.   PL.Debug = False
  551.    
  552.   Msg = Msg & vbCrLf & _
  553.     "% Добавлено фактов " & P_cds & ": " & Ret
  554.  
  555.   CDS.Close
  556.   CDS.DestroyObject
  557.  
  558.   Msg = Msg & vbCrLf & _
  559.     "% Запрос" & vbCrLf & _
  560.     "?- " & P_cds & "(ID, Name)"
  561.   Q_cds.OpenQuery
  562.  
  563.   Msg = Msg & vbCrLf & _
  564.     "% Обработка фактов"
  565.   If Not Q_cds.EOF Then
  566.     While Not Q_cds.EOF
  567.       Msg = Msg & vbCrLf & _
  568.             "%   " & Tv_cds.ReadInteger(0) & ": " & Tv_cds.ReadString(1)
  569.       Q_cds.NextSolution
  570.     Wend
  571.   Else
  572.     Msg = Msg & vbCrLf & "false."
  573.   End If
  574.   Q_cds.Close
  575.   Q_cds.DestroyObject
  576.   Tv_cds.DestroyObject
  577.  
  578.   pl_Example8 = Title & vbCrLf & Msg & vbCrLf & "%" & vbCrLf & "%%"
  579. End Function

Протокол

/* Примеры использования PL-объектов */

%%%%
%    pl_Examples
%      TgsPLClient: Initialise, IsInitialised

%%
% 1. pl_Example1(PL)
%      TgsPLClient: Call
%      TgsPLTermv: PutAtom, ToString
% Запрос
?- current_prolog_flag(executable, AppPath).
AppPath = 'C:\\Golden Software\\Gedemin\\gedemin.exe'.
%
%%

%%
% 2. pl_Example2(PL)
%      TgsPLClient: Call2, Call
%      TgsPLTermv: PutAtom, ToString
% Выполнение кода
?- assertz( pl_Example(pl_Example2, 'Пример 2') ).
true.
% Запрос
?- pl_Example(pl_Example2, Text).
Text = 'Пример 2'.
%
%%

%%
% 3. pl_Example3(PL)
%      TgsPLClient: Compound, Term, Call
%      TgsPLTermv: PutAtom, ToString
% Выполнение кода
?- assertz( pl_Example(pl_Example3,'Пример 3') ).
true.
% Запрос
?- pl_Example(pl_Example3, Text).
Text = 'Пример 3'.
%
%%

%%
% 4. pl_Example4(PL)
%      TgsPLClient: LoadScriptByName, Call
%      TgsPLTermv: ToString
% Запрос
?- hello_world(Hello).
Hello = 'Hello World'.
%
%%

%%
% 5. pl_Example5(PL)
%      TgsPLClient: Debug, LoadScriptByName
%      TgsPLTermv: ToString
%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close, Cut
% Запрос
?- hello_world(Hello).
Hello = 'Hello World' ;
Hello = helloNextWorld ;
Hello = "Hello last World".
% Запрос
?- hello_world(Hello), !.
Hello = 'Hello World'.
%
%%

%%
% 6. pl_Example6(PL)
%      TgsPLClient: LoadScriptByName
%      TgsPLTermv: DataType, ReadInteger, ReadAtom, ReadDate, ReadString
%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close
% Запрос
?- some_fact(Arg1, Arg2).
% Обработка фактов
%   1: Delphi
%   2: VBScript
%   3: Firebird
%   4: FastReport
%   5: SWI-Prolog
%   1995 - Анжелика
%   2003 - Гедымин
%   2015 -
%
%%

%%
% 7. pl_Example7(PL)
%      TgsPLClient: LoadScriptByName, Debug, MakePredicatesOfSQLSelect
%      TgsPLTermv: PutAtom, ReadString, PutString
%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close
% Запрос
?- gd_sql(gd_place, SQL).
% Обработка фактов, наполнение базы знаний
/*
SELECT
  p.ID, p.PARENT, p.NAME, p.PLACETYPE
FROM
  GD_PLACE p
*/

% Добавлено 265 фактов gd_place
% Запрос
?- place_info("Минск", PlaceNameOut, PlaceTypeOut).
% Поиск решений
%   Минск (Нас. пункт)
%   Минский (Район)
%   Минская (Область)
%   Беларусь (Страна)
%
%%

%%
% 8. pl_Example8(PL)
%      TgsPLClient: LoadScriptByName, ExtractData, MakePredicatesOfDataSet
%      TgsPLTermv: PutInteger, ReadInteger, ReadString
%      TgsPLQuery: OpenQuery, EOF, NextSolution, Close
% Запрос
?- generate_some_rec(ID, Name, 8).
% Заполнение клиентского набора данных из Пролог-запроса
% Добавлено записей: 8
% Считывание клиентского набора данных
%   ID   Name
%   1    Record1
%   2    Record2
%   3    Record3
%   4    Record4
%   5    Record5
%   6    Record6
%   7    Record7
%   8    Record8
% Удалено первых записей: 3
% Наполнение базы знаний из клиентского набора данных
% Добавлено фактов gd_some_rec: 5
% Запрос
?- gd_some_rec(ID, Name)
% Обработка фактов
%   4: Record4
%   5: Record5
%   6: Record6
%   7: Record7
%   8: Record8
%
%%
%%%%

pl_Examples_Script

  1. % Примеры использования PL-объектов
  2.  
  3. hello_world(Msg) :-
  4.     format(atom(Msg), '~w~w~w', ['Hello', ' ', 'World']).
  5. hello_world(Msg) :-
  6.     findall(X, some_fact(X), Xs),
  7.     atomic_list_concat(Xs, Msg).
  8. hello_world("Hello last World").
  9.  
  10. some_fact(hello).
  11. some_fact('Next').
  12. some_fact("World").
  13.  
  14. some_fact(1, 'Delphi').
  15. some_fact(2, 'VBScript').
  16. some_fact(3, 'Firebird').
  17. some_fact(4, 'FastReport').
  18. some_fact(5, 'SWI-Prolog').
  19. some_fact(none, 0).
  20. some_fact('1995-01-01', "Анжелика").
  21. some_fact('2003-01-01', "Гедымин").
  22. some_fact('2015-01-01', 2.6).
  23.  
  24. :- dynamic([gd_place/4]).
  25.  
  26. % gd_place(ID, Parent, Name, PlaceType)
  27.  
  28. place_info(Name, PlaceName, PlaceType) :-
  29.     place_name_type(_, Name, PlaceName, PlaceType).
  30.  
  31. place_name_type(ID, Name, Name, PlaceType) :-
  32.     gd_place(ID, _, Name, PlaceType).
  33. place_name_type(ID, Name, PlaceName, PlaceType) :-
  34.     gd_place(ID, Parent, Name, _),
  35.     place_name_type(Parent, _, PlaceName, PlaceType).
  36.  
  37. :-  style_check(-atom).
  38.  
  39. gd_sql(gd_place,
  40. "
  41. SELECT
  42.  p.ID, p.PARENT, p.NAME, p.PLACETYPE
  43. FROM
  44.  GD_PLACE p
  45. "
  46. ).
  47.  
  48. generate_some_rec(ID, Name, Number) :-
  49.     integer(Number),
  50.     between(1, Number, ID),
  51.     atomic_list_concat(["Record", ID], Name).
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты