File: client.pl

package info (click to toggle)
swi-prolog 9.0.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 82,408 kB
  • sloc: ansic: 387,503; perl: 359,326; cpp: 6,613; lisp: 6,247; java: 5,540; sh: 3,147; javascript: 2,668; python: 1,900; ruby: 1,594; yacc: 845; makefile: 428; xml: 317; sed: 12; sql: 6
file content (79 lines) | stat: -rw-r--r-- 1,842 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
:- module(pengine_demo,
          [ rpc_demo/2,                 % +Port, -Solution
            pengine_demo/0,
            pengine_demo/1              % +Port
          ]).
:- use_module(library(pengines)).

/** <module> Access pengines from Prolog
*/

%!  rpc_demo(Port, X)
%
%   True when X is a  result  of   the  query  below executed on the
%   pengines server at http://localhost:<Port>.
%
%     ==
%     member(X, [aap, noot, mies]
%     ==
%
%   To run this, start a Prolog process loading server.pl and start
%   the server using e.g.,
%
%     ==
%     ?- server(4040).
%     ==
%
%   Now, start a second Prolog on the same host, load this file and
%   run
%
%     ==
%     ?- rpc_demo(4040, X).
%     X = aap ;
%     X = noot ;
%     X = mies ;
%     false.
%     ==

rpc_demo(Port, X) :-
    format(atom(URL), 'http://localhost:~d', [Port]),
    pengine_rpc(URL, member(X, [aap, noot, mies])).

%!  pengine_demo is det.
%!  pengine_demo(+Port) is det.
%
%   Create a pengine, run a  simple  goal   in  it  and  process the
%   pengine events to collect  the  solutions.   If  Port  is given,
%   create a pengine on the server http://localhost:<Port>, else use
%   a _local_ pengine.

pengine_demo :-
    pengine_create(
        [ src_text("
\t        q(X) :- p(X).
                p(a). p(b). p(c).
\t      ")
        ]),
    pengine_event_loop(handle, []).

pengine_demo(Port) :-
    format(atom(URL), 'http://localhost:~d', [Port]),
    pengine_create(
        [ server(URL),
          src_text("
\t        q(X) :- p(X).
                p(a). p(b). p(c).
\t      ")
        ]),
    pengine_event_loop(handle, []).


handle(create(ID, _)) :-
    pengine_ask(ID, q(_X), []).
handle(success(ID, X, false)) :-
    !,
    writeln(X),
    pengine_destroy(ID).
handle(success(ID, X, true)) :-
    writeln(X),
    pengine_next(ID, []).