4int_hook(plus, plus1(atomic, atomic), atomic, []).
5plus1(atomic(A), atomic(B), atomic(Res), _Flags) :-
6 !,
7 writeln(+),
8 Res is A + B.
9
10int_hook(plus, plus2(..., ...), ..., []).
11plus2(A, B, Res, Flags) :-
12 !,
13 writeln(+),
14 interval_(A + B, Res, Flags).
15
19int_hook(frac, frac(_, _), _, []).
20frac(A, B, Res, Flags) :-
21 option(digits(Dig), Flags, _),
22 interval_(round(A, atomic(Dig)), A1, Flags),
23 interval_(round(B, atomic(Dig)), B1, Flags),
24 !,
25 interval(A1 / B1, Res, Flags).
26
27int_hook(dfrac, dfrac(_, _), _, []).
28dfrac(A, B, Res, Flags) :-
29 interval(frac(A, B), Res, Flags).
30
34int_hook(tstat, tstat(_), _, []).
35tstat(A, Res, Flags) :-
36 interval_(round(A, atomic(2)), Res, Flags).
37
38int_hook(hdrs, hdrs(_), _, []).
39hdrs(A, Res, Flags) :-
40 interval_(round(A, atomic(1)), Res, Flags).
41
42int_hook(chi2ratio, chi2ratio(_), _, []).
43chi2ratio(A, Res, Flags) :-
44 interval_(round(A, atomic(2)), Res, Flags).
45
46int_hook(pval, pval(_), _, []).
47pval(A, Res, Flags) :-
48 interval_(round(A, atomic(3)), Res, Flags).
49
54int_hook(omit_left, left(_), _, [evaluate(false)]).
55left(A, Res, Flags) :-
56 A =.. [_Op, _L, R],
57 interval_(R, Res, Flags).
58
59int_hook(omit_right, right(_), _, [evaluate(false)]).
60right(A, Res, Flags) :-
61 A =.. [_Op, L, _R],
62 interval_(L, Res, Flags).
63
64int_hook(omit, omit(_, _), _, [evaluate(false)]).
65omit(_Bug, _Expr, na, _Flags).
66
68int_hook(instead, instead1(_, _, _), _, [evaluate(false)]).
69instead1(_Bug, Wrong, _Correct, Res, Flags) :-
70 interval_(Wrong, Res, Flags).
71
72int_hook(instead, instead2(_, _, _, _), _, [evaluate(false)]).
73instead2(_Bug, Wrong, _Correct, _Correct0, Res, Flags) :-
74 interval_(Wrong, Res, Flags).
75
77int_hook(drop_right, drop_right(_, _), _, [evaluate(false)]).
78drop_right(_Bug, A, Res, Flags) :-
79 right(A, Res, Flags).
80
81int_hook(drop_left, drop_left(_, _), _, [evaluate(false)]).
82drop_left(_Bug, A, Res, Flags) :-
83 left(A, Res, Flags).
84
86int_hook(add_right, add(_, _), _, [evaluate(false)]).
87add(_Bug, A, Res, Flags) :-
88 interval_(A, Res, Flags).
89
90int_hook(add_left, add(_, _), _, [evaluate(false)]).
91
95int_hook(dot, dot(_, _), _, []).
96dot(A, B, Res, Flags) :-
97 interval_(A * B, Res, Flags).
98
102int_hook(available, avail1(atomic), _, []).
103avail1(atomic(A), Res, _Flags) :-
104 avail2(atomic(A), Res),
105 !,
106 Res = true
107 ; Res = false.
108
109avail2(atomic(A), Res),
110 integer(A)
111=> eval(A, Res).
112
113avail2(atomic(A), Res),
114 number(A)
115=> float_class(A, Class),
116 dif(Class, nan),
117 eval(A, Res).
118
119avail2(atomic(A), Res)
120=> eval(A, A1),
121 avail2(A1, Res).
122
123int_hook(available, avail3(...), _, []).
124avail3(A ... B, Res, _Flags)
125=> avail2(atomic(A), A1),
126 avail2(atomic(B), B1),
127 eval(A1, B1, _),
128 !,
129 Res = true;
130 Res = false.
131
132int_hook(=@=, equal1(_, _), _, []).
133equal1(A, B, Res, Flags) :-
134 interval_(A =:= B, Res, Flags).
135
137int_hook(+, ciplus1(ci, _), ci, []).
138ciplus1(ci(A, B), C, Res, Flags) :-
139 interval_(A + C, A1, Flags),
140 interval_(B + C, B1, Flags),
141 Res = ci(A1, B1).
142
143int_hook(+, ciplus2(_, ci), ci, []).
144ciplus2(C, ci(A, B), Res, Flags) :-
145 ciplus1(ci(A, B), C, Res, Flags).
146
148int_hook(-, ciminus(ci, _), ci, []).
149ciminus(ci(A, B), C, Res, Flags) :-
150 interval_(A - C, A1, Flags),
151 interval_(B - C, B1, Flags),
152 Res = ci(A1, B1).
153
155int_hook(*, cimult(ci, _), ci, []).
156cimult(ci(A, B), C, Res, Flags) :-
157 interval_(A * C, A1, Flags),
158 interval_(B * C, B1, Flags),
159 Res = ci(A1, B1).
160
162int_hook(/, cidiv(ci, _), ci, []).
163cidiv(ci(A, B), C, Res, Flags) :-
164 interval_(A / C, A1, Flags),
165 interval_(B / C, B1, Flags),
166 Res = ci(A1, B1).
167
169int_hook(exp, ciexp(ci), ci, []).
170ciexp(ci(A, B), Res, Flags) :-
171 interval_(exp(A), A1, Flags),
172 interval_(exp(B), B1, Flags),
173 Res = ci(A1, B1).
174
176int_hook(pm, pm(_, _), ci, []).
177pm(A, B, Res, Flags) :-
178 interval_(A - B, A1, Flags),
179 interval_(A + B, B1, Flags),
180 Res = ci(A1, B1).
181
189
193int_hook(denote, den(_, _, _), _, [evaluate(false)]).
194den(_Sym, A, _Text, Res, Flags) :-
195 interval_(A, A1, Flags),
196 Res = A1.
197
201int_hook(color, col(_, _), _, [evaluate(false)]).
202col(_Col, A, Res, Flags) :-
203 interval_(A, A1, Flags),
204 Res = A1.
205
209int_hook(@, read(_, _), _, []).
210read(Options, A, Res, Flags) :-
211 !, append(Options, Flags, New),
212 option(digits(D), New, 1.0Inf),
213 Eps is 10^(-D)/2,
214 MEps is -Eps,
215 interval_(A + MEps...Eps, Res, New).
216
220int_hook(';', or(_, _), _, []).
221or(A, B, Res, Flags) :-
222 interval_(A, _, Flags),
223 interval_(B, Res, Flags).
224
225int_hook('{}', curly(_), _, []).
226curly(A, Res, Flags) :-
227 interval_(A, Res, Flags)