1:- module(scasp,
2 [ scasp/2, 3 (?)/1, 4 (??)/1, 5 (?--)/1, 6 (?+-)/1, 7 (?-+)/1, 8 (?++)/1, 9 (??+-)/1, 10 (??-+)/1, 11 (??++)/1, 12
13 scasp_show/2, 14
15 (scasp_dynamic)/1, 16 scasp_assert/1, 17 scasp_assert/2, 18 scasp_retract/1, 19 scasp_retractall/1, 20 scasp_abolish/1, 21 (#)/1, 22 (#)/2, 23 (pred)/1, 24 (show)/1, 25 (abducible)/1, 26 (abducible)/2, 27
28 begin_scasp/1, 29 begin_scasp/2, 30 end_scasp/0,
31 scasp_listing/2, 32 scasp_model/1, 33 scasp_stack/1, 34 scasp_justification/2, 35 (not)/1, 36 (-)/1, 37
38 (#=)/2,
39 (#<>)/2,
40 (#<)/2,
41 (#>)/2,
42 (#=<)/2,
43 (#>=)/2,
44
45 op(900, fy, not),
46 op(700, xfx, '\u2209'), 47 op(1150, fx, ??), 48 op(1150, fx, ?), 49 op(1150, fx, ?--), 50 op(1150, fx, ?+-), 51 op(1150, fx, ?-+), 52 op(1150, fx, ?++), 53 op(1150, fx, ??+-), 54 op(1150, fx, ??-+),
55 op(1150, fx, ??++),
56 op(950, xfx, ::), 57 op(1200, fx, #),
58 op(1150, fx, pred),
59 op(1150, fx, show),
60 op(1150, fx, abducible),
61 op(1150, fx, scasp_dynamic),
62 op(700, xfx, #=),
63 op(700, xfx, #<>),
64 op(700, xfx, #<),
65 op(700, xfx, #>),
66 op(700, xfx, #=<),
67 op(700, xfx, #>=)
68 ]).
78
79:- use_module(scasp/embed). 80:- use_module(scasp/dyncall). 81:- use_module(scasp/messages). 82
83:- meta_predicate
84 ?(:),
85 ??(:),
86 ?--(:),
87 ?+-(:),
88 ?-+(:),
89 ?++(:),
90 ??+-(:),
91 ??-+(:),
92 ??++(:).
106? Q :- scasp_and_show(Q, unicode, false).
107?? Q :- scasp_and_show(Q, unicode, unicode).
108
109?-- Q :- scasp_and_show(Q, false, false).
110?-+ Q :- scasp_and_show(Q, false, unicode).
111?+- Q :- scasp_and_show(Q, unicode, false).
112?++ Q :- scasp_and_show(Q, unicode, unicode).
113??-+ Q :- scasp_and_show(Q, false, human).
114??+- Q :- scasp_and_show(Q, human, false).
115??++ Q :- scasp_and_show(Q, human, human).
116
117scasp_and_show(Q, Model, Tree) :-
118 scasp_mode(M0, T0),
119 setup_call_cleanup(
120 set_scasp_mode(Model, Tree),
121 ( scasp(Q, [])
122 ; false 123 ),
124 set_scasp_mode(M0, T0)).
125
126scasp_mode(M, T) :-
127 current_prolog_flag(scasp_show_model, M),
128 current_prolog_flag(scasp_show_justification, T).
129
130set_scasp_mode(M, T) :-
131 set_prolog_flag(scasp_show_model, M),
132 set_prolog_flag(scasp_show_justification, T).
133
134
135
136 139
140:- multifile
141 sandbox:safe_meta_predicate/1,
142 sandbox:safe_prolog_flag/2. 143
144sandbox:safe_meta(scasp:(? _), []).
145sandbox:safe_meta(scasp:(?? _), []).
146sandbox:safe_meta(scasp:(?-- _), []).
147sandbox:safe_meta(scasp:(?+- _), []).
148sandbox:safe_meta(scasp:(?-+ _), []).
149sandbox:safe_meta(scasp:(?++ _), []).
150sandbox:safe_meta(scasp:(??+- _), []).
151sandbox:safe_meta(scasp:(??-+ _), []).
152sandbox:safe_meta(scasp:(??++ _), []).
153
154sandbox:safe_prolog_flag(scasp_lang, _).
155sandbox:safe_prolog_flag(scasp_unknown, _).
156sandbox:safe_prolog_flag(scasp_plain_dual, _).
157sandbox:safe_prolog_flag(scasp_compile_olon, _).
158sandbox:safe_prolog_flag(scasp_compile_nmr, _).
159sandbox:safe_prolog_flag(scasp_dcc, _)
Using
s(CASP)
from PrologWhile library(scasp/main) is used to build the
scasp
executable, this library (library(scasp)) is used to embed or dynamically creates(CASP)
programs in Prolog and query them from Prolog. */