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 (??++)/1, 13
14 scasp_show/2, 15
16 (scasp_dynamic)/1, 17 scasp_assert/1, 18 scasp_assert/2, 19 scasp_retract/1, 20 scasp_retractall/1, 21 scasp_abolish/1, 22 (#)/1, 23 (#)/2, 24 (pred)/1, 25 (show)/1, 26 (abducible)/1, 27 (abducible)/2, 28
29 begin_scasp/1, 30 begin_scasp/2, 31 end_scasp/0,
32 scasp_listing/2, 33 scasp_model/1, 34 scasp_stack/1, 35 scasp_justification/2, 36 (not)/1, 37 (-)/1, 38
39 (#=)/2,
40 (#<>)/2,
41 (#<)/2,
42 (#>)/2,
43 (#=<)/2,
44 (#>=)/2,
45 '\u2209'/2, 46
47 op(900, fy, not),
48 op(700, xfx, '\u2209'), 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(1150, fx, ??+-), 57 op(1150, fx, ??-+),
58 op(1150, fx, ??++),
59 op(950, xfx, ::), 60 op(1200, fx, #),
61 op(1150, fx, pred),
62 op(1150, fx, show),
63 op(1150, fx, abducible),
64 op(1150, fx, scasp_dynamic),
65 op(700, xfx, #=),
66 op(700, xfx, #<>),
67 op(700, xfx, #<),
68 op(700, xfx, #>),
69 op(700, xfx, #=<),
70 op(700, xfx, #>=)
71 ]).
81
82:- use_module(scasp/embed). 83:- use_module(scasp/dyncall). 84:- use_module(scasp/messages). 85
86:- meta_predicate
87 ?(:),
88 ??(:),
89 ?--(:),
90 ?+-(:),
91 ?-+(:),
92 ?++(:),
93 ?+++(:),
94 ??+-(:),
95 ??-+(:),
96 ??++(:).
111? Q :- scasp_and_show(Q, unicode, false, []).
112?? Q :- scasp_and_show(Q, unicode, unicode, []).
113
114?-- Q :- scasp_and_show(Q, false, false, []).
115?-+ Q :- scasp_and_show(Q, false, unicode, []).
116?+- Q :- scasp_and_show(Q, unicode, false, []).
117?++ Q :- scasp_and_show(Q, unicode, unicode, []).
118?+++ Q :- scasp_and_show(Q, unicode, [unicode(true), long(true)], []).
119??-+ Q :- scasp_and_show(Q, false, human, []).
120??+- Q :- scasp_and_show(Q, human, false, []).
121??++ Q :- scasp_and_show(Q, human, human, []).
122
123scasp_and_show(Q, Model, Tree, Options) :-
124 scasp_mode(M0, T0),
125 setup_call_cleanup(
126 set_scasp_mode(Model, Tree),
127 ( scasp(Q, Options)
128 ; false 129 ),
130 set_scasp_mode(M0, T0)).
131
132scasp_mode(M, T) :-
133 current_prolog_flag(scasp_show_model, M),
134 current_prolog_flag(scasp_show_justification, T).
135
136set_scasp_mode(M, T) :-
137 set_prolog_flag(scasp_show_model, M),
138 set_prolog_flag(scasp_show_justification, T).
139
140
141
142 145
146:- multifile
147 sandbox:safe_meta_predicate/1,
148 sandbox:safe_prolog_flag/2. 149
150sandbox:safe_meta(scasp:(? _), []).
151sandbox:safe_meta(scasp:(?? _), []).
152sandbox:safe_meta(scasp:(?-- _), []).
153sandbox:safe_meta(scasp:(?+- _), []).
154sandbox:safe_meta(scasp:(?-+ _), []).
155sandbox:safe_meta(scasp:(?++ _), []).
156sandbox:safe_meta(scasp:(??+- _), []).
157sandbox:safe_meta(scasp:(??-+ _), []).
158sandbox:safe_meta(scasp:(??++ _), []).
159sandbox:safe_meta(scasp_dyncall:(scasp_show(_,_)), []).
160
161sandbox:safe_prolog_flag(scasp_lang, _).
162sandbox:safe_prolog_flag(scasp_unknown, _).
163sandbox:safe_prolog_flag(scasp_plain_dual, _).
164sandbox:safe_prolog_flag(scasp_compile_olon, _).
165sandbox:safe_prolog_flag(scasp_compile_nmr, _).
166sandbox:safe_prolog_flag(scasp_forall, _).
167sandbox: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. */