head 1.32; access; symbols; locks ulrich:1.32; strict; comment @# @; 1.32 date 2011.06.24.11.56.50; author ulrich; state Exp; branches; next 1.31; 1.31 date 2011.01.06.00.07.56; author ulrich; state Exp; branches; next 1.30; 1.30 date 2010.12.11.20.47.03; author ulrich; state Exp; branches; next 1.29; 1.29 date 2010.07.27.20.33.35; author ulrich; state Exp; branches; next 1.28; 1.28 date 2010.07.26.14.29.27; author ulrich; state Exp; branches; next 1.27; 1.27 date 2010.07.26.14.19.32; author ulrich; state Exp; branches; next 1.26; 1.26 date 2010.07.19.11.13.49; author ulrich; state Exp; branches; next 1.25; 1.25 date 2010.07.12.09.36.49; author ulrich; state Exp; branches; next 1.24; 1.24 date 2009.10.22.14.45.55; author ulrich; state Exp; branches; next 1.23; 1.23 date 2009.10.21.11.08.37; author ulrich; state Exp; branches; next 1.22; 1.22 date 2009.10.19.17.30.13; author ulrich; state Exp; branches; next 1.21; 1.21 date 2009.10.18.20.13.12; author ulrich; state Exp; branches; next 1.20; 1.20 date 2009.10.17.17.05.08; author ulrich; state Exp; branches; next 1.19; 1.19 date 2009.10.12.22.20.06; author ulrich; state Exp; branches; next 1.18; 1.18 date 2009.10.11.17.13.05; author ulrich; state Exp; branches; next 1.17; 1.17 date 2009.10.11.16.39.15; author ulrich; state Exp; branches; next 1.16; 1.16 date 2009.10.11.16.11.03; author ulrich; state Exp; branches; next 1.15; 1.15 date 2009.10.11.15.04.09; author ulrich; state Exp; branches; next 1.14; 1.14 date 2009.10.11.15.02.02; author ulrich; state Exp; branches; next 1.13; 1.13 date 2009.10.11.14.55.30; author ulrich; state Exp; branches; next 1.12; 1.12 date 2009.10.11.11.56.25; author ulrich; state Exp; branches; next 1.11; 1.11 date 2009.10.08.12.10.03; author ulrich; state Exp; branches; next 1.10; 1.10 date 2009.10.08.12.09.37; author ulrich; state Exp; branches; next 1.9; 1.9 date 2009.10.07.11.10.02; author ulrich; state Exp; branches; next 1.8; 1.8 date 2009.10.05.22.04.33; author ulrich; state Exp; branches; next 1.7; 1.7 date 2009.10.05.17.45.14; author ulrich; state Exp; branches; next 1.6; 1.6 date 2009.10.05.17.14.06; author ulrich; state Exp; branches; next 1.5; 1.5 date 2009.10.05.17.04.53; author ulrich; state Exp; branches; next 1.4; 1.4 date 2009.10.05.03.28.06; author ulrich; state Exp; branches; next 1.3; 1.3 date 2009.10.05.03.11.57; author ulrich; state Exp; branches; next 1.2; 1.2 date 2009.10.05.03.10.23; author ulrich; state Exp; branches; next 1.1; 1.1 date 2009.10.04.00.35.45; author ulrich; state Exp; branches; next ; desc @@ 1.32 log @fixed HTML @ text @ N224 Evaluable functors: current practice

ISO/IEC JTC1 SC22 WG17 N224
Evaluable functors, current practice

Ulrich Neumerkel (Version history)
This is the final state of the document as it was used for the resolutions in Edinburgh. In the meantime many systems adopted accordingly. This document is superseded by DTC2.
In 13211-1:1995 evaluable functors (9) are used for evaluating an expression (7.9) within Arithmetic evaluation (8.6) and Arithmetic comparison (8.7). This document provides an overview of the current practice of evaluable functors that are not part of 13211-1 but are compliant (5.1) due to:
5.5.10 Evaluable functors
A processor may support one or more additional evaluable
functors (9) as an implementation specific feature.

Summary of evaluable functors in 13211-1:1995

9.1 The simple arithmetic functors: (+)/2, (-)/2, (*)/2, (//)/2, (/)/2, (rem)/2, (mod)/2, (-)/1, abs/1, sign/1, float_integer_part/1, float_fractional_part/1, float/1, floor/1, truncate/1, round/1, ceiling/1.
9.3 Other arithmetic functors: (**)/2, sin/1, cos/1, atan/1, exp/1, log/1, sqrt/1.
9.4 Bitwise functors: (>>)/2, (<<)/2, (/\)/2, (\/)/2, (\)/1.

Implementation specific evaluable functors

Implementors interested in standardization who wish to see their system listed in this table are asked to provide a table in HTML with the complete first row and one row for their system. If the same function is provided with an alternate name, the entry shall be labelled "alt". Functions added since the Pasadena meeting shall be labelled "new".

core core pllib cuf B IF SICStus YAP SWI ECLiPSe GNU
Functor 2008-11-17 2009-07-17 7B 7.3V5.33.12 6.05.76.01.3.2
(+)/1 9.1 9.1 yes yesyesyesyesyesyesyes
max/2 9.3.119.3.11yes yesyesyesyesyesyesyes
min/2 9.3.109.3.10yes yesyesyesyesyesyesyes
acos/1 9.5.5 9.5.5 yes yesyesyesyesyesyesyes
asin/1 9.5.4 9.5.4 yes yesyesyesyesyesyesyes
tan/1 9.5.3 9.5.3 yes yesyesyesyesyesyesnew
pi/0 9.7.1 9.7.1 yes yesyes yesyesyesnew
xor/2 yes altaltaltyesyesalt
(#)/2 alt yesyesyesaltaltalt
(><)/2 9.4.6 9.4.6 alt altaltaltnewaltnew
atan2/2 yes yesyesaltaltalt
atan/2 9.5.6 9.5.6 alt altaltnewyesnew
(^)/2 new any yes yesyesyesnew
(div)/2 yes yes newyes
e/0 9.7.2 9.7.2 yes yes yesyesyesnew
log10/1 yesyes new
msb/1 yesyesyes new
lsb/1 newyes new
popcount/1 newyes new
clrbit/2 yes
getbit/2 yes
setbit/2 yes
log1p/1 ?
expm1/1 ?
signum/1 yes alt
sgn/1 yes
gcd/2 9.3.9 9.3.9 yes yesyesyesyesnew
lcm/2 yes
eval/1 yesyes
nexttoward/2 yes
copysign/2 yesyes
extensibility - - ? yesyes
Further SICStus 3: acot/1 acot2/2 acoth/1 cot/1 coth/1

Details

1 (#)/2 vs. (><)/2 vs. xor/2. (#)/2 is conflicting or irritating w.r.t constraints. (><)/2 suggests to be something similar to a relational operator like (>)/2. xor/2 says what it is, but isn't an operator. Adding xor as operator seems problematic. This voids Prolog text like (a, b, xor).

2 Original name: atan2/2 vs. replacement atan/2. In favor of atan2/2: All other languages/libraries call it atan2. Cannot be confused with atan/1 of 13211-1:1995.

3 (^)/2 - missing for unbounded integers. (**)/2 has as result type float only. This is useful for arguments of type float or bounded integers. But for unbounded integers the result type should be an unbounded integer. To avoid compatibility problems a new name seems to be the best. Also, (**)/2 is declared as op(200,xfx,**). in the operator table 6.3.4.4. This means that 7**7**7. is invalid Prolog text, whereas 7^7^7. is valid with the correct associativity. ^ is used also in Haskell. An addition seems to be less problematic than a change.

4 Instead of e one can write exp(1).

5 div/2 is defined as:

div(X, Y, Z) :-
    Z is (X - X mod Y) // Y.

ECLiPSe remarks

signum/1 and sgn/1 always return an integer (-1, 0 or 1).

In ECLiPSe native mode, floor, ceiling, round and truncate always return a result of the same type as the argument.

integer/1 is a pure type conversion (like float/1). It converts its argument to integer type iff it has an integral value. Otherwise it raises an exception. The purpose is to convert the results of sign/1 or float_integer_part/1 (and non-standard versions of round, truncate, floor, ceiling) to integers, if needed.

setbit(X,Y) sets bit Y in X. Bits are counted from 0 (lsb).

div/2 is the division that goes with mod/2, while (//)/2 goes with rem/2.

eval/1 is used to mark variables that may be instantiated to a symbolic expression (rather than a number) at runtime. See this thread in comp.lang.prolog.

In ECLiPSe, any deterministic predicate that returns a number as its last argument can be used as an arithmetic function, e.g. atom_length(hello) will evaluate to 5 via calling atom_length/2. Arguments of such expressions are not recursively evaluated (unless this is done explicitly by the corresponding predicate), and therefore do not need to be arithmetic expressions themselves.

Criteria for inclusion

Arithmetic comparison

8.7.1 (=:=)/2, (=\=)/2, (<)/2, (=<)/2, (>)/2, (>=)/2.

8.7.2 (>=<)/2 arithmetic comparable

>=<(E1, E2) is true iff the corresponding evaluated values EV1 and EV2 are comparable numbers.
(>=<)/2
E1 >=< E2 evaluates E1 to V1 and E2 to V2; this process may raise exceptions, including if V1 or V2 is not something the processor recognises as a number.

It succeeds if V1 and V2 are comparable numbers. It fails if V1 and V2 are numbers that are not comparable.

It needs some standardese around to it allow for the possibility that V1, V2, or both might be constrained and the constraints might be such as to determine the order.

This is intended to be the IEEE "?" comparison, but needs to be described so that a Prolog that allows complex numbers (as C99 does, which could be used to implement it) could use it to avoid trying to order complex numbers.

At least one Prolog with rational arithmetic had rational ±infinity and rational NaN, so it would have had a use for this too.


Validated HTML @ 1.31 log @Final reference to DTC2 @ text @d169 1 a169 1 @ 1.30 log @Last remark @ text @d82 1 a82 1 accordingly. @ 1.29 log @N224 @ text @d80 6 @ 1.28 log @IF/Prolog: div/2 is defined but undocumented. Wer suchet, der findet! @ text @d6 1 a6 1 Evaluable functors: current practice d153 2 a154 2 (#)/2 alt yesyesyesaltaltalt (><)/2 9.4.6 9.4.6 alt altaltaltnewaltnew d156 1 a156 2 atan/2 9.5.6 9.5.6 alt altaltnewyesnew e/0 9.7.2 9.7.2 yes yes yesyesyesnew d158 1 d162 4 a178 1 (div)/2 yes yes yes d261 11 @ 1.27 log @Added IF/Prolog's undocumented (^)/2 @ text @d176 1 a176 1 (div)/2 yes yes @ 1.26 log @Changes with Jonathan and Jan @ text @d159 1 a159 1 (^)/2 new any yesyesyesnew @ 1.25 log @Removed rational, bounded real, and list functions @ text @d153 1 a155 1 xor/2 yes altaltaltyesyesalt a158 2 gcd/2 9.3.9 9.3.9 yes yesyesyesyesnew msb/1 yesyesyes new d160 1 d162 1 d164 1 d171 1 d173 1 d175 1 d177 1 d179 2 d182 2 d186 4 d191 1 d196 1 d198 1 a198 3 clrbit/2 yes getbit/2 yes setbit/2 yes d200 1 @ 1.24 log @*** empty log message *** @ text @d175 2 a176 2 lsb/1 yes new popcount/1 yes new d191 1 d206 1 a206 1 @ 1.23 log @Correction (disappieared in 1.20) by Joachim Schimpf @ text @d86 1 a86 1 compliant (5.1) due to 5.5.10 Evaluable functors: d89 2 a90 1 A processor may support one or more additional evaluable functors (9) d239 1 a239 1 in the operator table 6.3.4.4. This means that 7**7**7 @ 1.22 log @*** empty log message *** @ text @d186 1 a186 1 eval/1 @ 1.21 log @ROK proposal added @ text @d139 1 a139 1 6 d145 45 a189 45 (+)/1 9.1 9.1 yes yesyesyesyesyesyesyes max/2 9.3.119.3.11yes yesyesyesyesyesyesyes min/2 9.3.109.3.10yes yesyesyesyesyesyesyes acos/1 9.5.5 9.5.5 yes yesyesyesyesyesyesyes asin/1 9.5.4 9.5.4 yes yesyesyesyesyesyesyes tan/1 9.5.3 9.5.3 yes yesyesyesyesyesyesnew pi/0 9.7.1 9.7.1 yes yesyes yesyesyesnew (#)/2 alt yesyesyesaltaltalt (><)/29.4.6 9.4.6 alt altaltaltnewaltnew xor/2 yes altaltaltyesyesalt atan2/2 yes yesyesaltaltalt atan/2 9.5.6 9.5.6 alt altaltnewyesnew e/0 9.7.2 9.7.2 yes yes yesyesyesnew gcd/2 9.3.9 9.3.9 yes yesyesyesyesnew msb/1 yesyesyes new (^)/2 new any yesyesyesnew exp/2 yesyes alt log10/1 yesyes new sinh/1 ? yesyesyes new cosh/1 ? yesyesyes new tanh/1 ? yesyesyes new asinh/1 ? yesyes new acosh/1 ? yesyes new atanh/1 ? yesyes new log/2 9.3.8 yes yes new epsilon/0 9.7.3 9.7.3 yes new (div)/2 yes yes lgamma/1 yes ceil/1 yesalt lsb/1 yes new popcount/1 yes new powm/3 yes log1p/1 ? expm1/1 ? signum/1 yes alt sgn/1 yes lcm/2 yes clrbit/2 yes getbit/2 yes setbit/2 yes integer/1 yes eval/1 nexttoward/2 yes copysign/2 yesyes extensibility - - ? yesyes d191 3 a193 3 sum/1 yes yes min/1 yes yes max/1 yes yes d195 4 a198 4 breal/1 yes breal_from_bounds/1 yes breal_min/1 yes breal_max/1 yes d200 4 a203 4 rational/1 yes rationalize/1 yes numerator/1 yes denominator/1 yes d292 1 a292 1

Arithmetic comparison

@ 1.20 log @*** empty log message *** @ text @a185 1 copysign/2 yes d275 1 a275 1 atom_length(hello) will evaluate to 5 via calling atom_length/2. d298 7 d306 12 d319 16 @ 1.19 log @Rearrange Joachim, Correct Daniel Diaz @ text @d120 1 a120 1 labelled "new". (Next update will be no later than 2009-10-15.) d129 8 a136 7 B IF SICStus YAP SWI ECLiPSe GNU d140 65 a204 61 7.3V5.33.12 6.05.76.01.3.2 (+)/1 9.1 9.1 yesyesyesyesyesyesyesyes max/2 9.3.119.3.11yesyesyesyesyesyesyesyes min/2 9.3.109.3.10yesyesyesyesyesyesyesyes acos/1 9.5.5 9.5.5 yesyesyesyesyesyesyesyes asin/1 9.5.4 9.5.4 yesyesyesyesyesyesyesyes tan/1 9.5.3 9.5.3 yesyesyesyesyesyesyesnew pi/0 9.7.1 9.7.1 yesyesyes yesyesyesnew (#)/2 alt yesyesyesaltaltalt (><)/29.4.6 9.4.6 alt altaltaltnewaltnew xor/2 yes altaltaltyesyesalt atan2/2 yes yesyesaltaltalt atan/2 9.5.6 9.5.6 alt altaltnewyesnew e/0 9.7.2 9.7.2 yesyes yesyesyesnew gcd/2 9.3.9 9.3.9 yes yesyesyesyesnew msb/1 yesyesyes new (^)/2 new any yesyesyesnew exp/2 yesyes alt log10/1 yesyes new sinh/1 ? yesyesyes new cosh/1 ? yesyesyes new tanh/1 ? yesyesyes new asinh/1 ? yesyes new acosh/1 ? yesyes new atanh/1 ? yesyes new log/2 9.3.8 yes yes new epsilon/0 9.7.3 9.7.3 yes new (div)/2 yes yes lgamma/1 yes ceil/1 yesalt lsb/1 yes new popcount/1 yes new powm/3 yes log1p/1 ? expm1/1 ? signum/1 yes alt sgn/1 yes lcm/2 yes clrbit/2 yes getbit/2 yes setbit/2 yes integer/1 yes breal/1 yes breal_from_bounds/1 yes breal_min/1 yes breal_max/1 yes copysign/2 yes eval/1 yesyes extensibility - - ? yesyes List functions sum/1 yes yes min/1 yes yes max/1 yes yes Rational numbers rational/1 yes rationalize/1 yes numerator/1 yes denominator/1 yes a267 4 breal/1, breal_from_bounds/1, breal_min/1 and breal_max/1 are operations for bounded real numbers (intervals).

@ 1.18 log @Removed list-functions @ text @d153 1 a153 1 atan2/2 yes yesyesaltaltnew a183 4 rational/1 yes rationalize/1 yes numerator/1 yes denominator/1 yes a187 1 eval/1 yes d189 11 a202 1 d236 1 a236 1 correct associativity. ^ is use also in Haskell. An d240 1 a262 4 rational/1, rationalize/1, numerator/1 an denominator/1 are operations for rational numbers.

a279 3 d298 2 d301 1 @ 1.17 log @Align GNU @ text @a191 3 sum/1 yes min/1 yes max/1 yes a264 4 sum/1, min/1 and max/1 operate on lists of expressions, and are the obvious generalisations of +/2, min/2 and max/2.

d293 6 @ 1.16 log @Comments from Richard O'Keefe, Date: Fri, 9 Oct 2009 17:09:38 +1300 @ text @d150 1 a150 1 (#)/2 alt yesyesyesaltalt d152 1 a152 1 xor/2 yes altaltaltyesyes d300 3 @ 1.15 log @Fehler bei ECLiPSe @ text @d158 1 a158 1 (^)/2 new yesyesyesnew d196 1 d234 1 a234 2 correct associativity. ^ is frequently used also in other programming languages for exponentiation with unbounded integers. An @ 1.14 log @GNU row, Daniel Diaz, Date: Fri, 09 Oct 2009 14:28:22 +0200 @ text @d134 1 a134 1 ECLiPSe @ 1.13 log @ECLiPSe row, Joachim Schimpf, Date: Fri, 09 Oct 2009 14:05:22 +1100 @ text @d134 2 a135 1 ECLiPSe d140 1 a140 1 6.05.76.0 d143 53 a195 53 (+)/1 9.1 9.1 yesyesyesyesyesyesyes max/2 9.3.119.3.11yesyesyesyesyesyesyes min/2 9.3.109.3.10yesyesyesyesyesyesyes acos/1 9.5.5 9.5.5 yesyesyesyesyesyesyes asin/1 9.5.4 9.5.4 yesyesyesyesyesyesyes tan/1 9.5.3 9.5.3 yesyesyesyesyesyesyes pi/0 9.7.1 9.7.1 yesyesyes yesyesyes (#)/2 alt yesyesyesaltalt (><)/29.4.6 9.4.6 alt altaltaltnewalt xor/2 yes altaltaltyesyes atan2/2 yes yesyesaltalt atan/2 9.5.6 9.5.6 alt altaltnewyes e/0 9.7.2 9.7.2 yesyes yesyesyes gcd/2 9.3.9 9.3.9 yes yesyesyesyes msb/1 yesyesyes (^)/2 new yesyesyes exp/2 yesyes alt log10/1 yesyes sinh/1 ? yesyesyes cosh/1 ? yesyesyes tanh/1 ? yesyesyes asinh/1 ? yesyes acosh/1 ? yesyes atanh/1 ? yesyes log/2 9.3.8 yes yes epsilon/0 9.7.3 9.7.3 yes (div)/2 yes yes lgamma/1 yes ceil/1 yesalt lsb/1 yes popcount/1 yes powm/3 yes log1p/1 ? expm1/1 ? signum/1 yes alt sgn/1 yes lcm/2 yes clrbit/2 yes getbit/2 yes setbit/2 yes integer/1 yes rational/1 yes rationalize/1 yes numerator/1 yes denominator/1 yes breal/1 yes breal_from_bounds/1 yes breal_min/1 yes breal_max/1 yes sum/1 yes min/1 yes max/1 yes eval/1 yes d237 1 a237 1

ECLiPSe remarks @ 1.12 log @*** empty log message *** @ text @d133 2 a134 1 SWI d139 1 a139 1 6.05.7 d141 54 a194 35 (+)/1 9.1 9.1 yesyesyesyesyesyes max/2 9.3.119.3.11yesyesyesyesyesyes min/2 9.3.109.3.10yesyesyesyesyesyes acos/1 9.5.5 9.5.5 yesyesyesyesyesyes asin/1 9.5.4 9.5.4 yesyesyesyesyesyes tan/1 9.5.3 9.5.3 yesyesyesyesyesyes pi/0 9.7.1 9.7.1 yesyesyes yesyes (#)/2 alt yesyesyesalt (><)/29.4.6 9.4.6 alt altaltaltnew xor/2 yes altaltaltyes atan2/2 yes yesyesalt atan/2 9.5.6 9.5.6 alt altaltnew e/0 9.7.2 9.7.2 yesyes yesyes gcd/2 9.3.9 9.3.9 yes yesyesyes msb/1 yesyesyes (^)/2 new yesyes exp/2 yesyes log10/1 yesyes sinh/1 ? yesyesyes cosh/1 ? yesyesyes tanh/1 ? yesyesyes asinh/1 ? yesyes acosh/1 ? yesyes atanh/1 ? yesyes log/2 9.3.8 yes yes epsilon/0 9.7.3 9.7.3 yes (div)/2 yes lgamma/1 yes ceil/1 yes lsb/1 yes popcount/1 yes powm/3 yes log1p/1 ? expm1/1 ? signum/1 yes d236 51 @ 1.11 log @Nach Aussendung @ text @d83 1 a83 1 expression (7.9) for Arithmetic evaluation (8.6) and Arithmetic d119 1 a119 1 labelled "alt". Functions added since the Pasadena Meeting shall be d190 1 a190 1 (><)/2 suggests to be something similar than a d192 3 a194 1 xor/2 says what it is. @ 1.10 log @*** empty log message *** @ text @d118 2 a119 2 function is provided with an alternate name, the entry is labelled "alt". Functions added since the Pasadena Meeting are @ 1.9 log @*** empty log message *** @ text @d119 2 a120 1 "alt". d148 1 a148 1 (><)/29.4.6 9.4.6 alt altaltaltyes d151 1 a151 1 atan/2 9.5.6 9.5.6 alt altaltyes d155 1 a155 1 (^)/2 yesyes d188 5 a192 2 vs. (><)/2 vs. xor/2 d206 7 a212 5 compatibility problems a new name seems to be the best. ^ is frequently used also in other programming languages for exponentiation with unbounded integers. Example: 7^7^7. @ 1.8 log @*** empty log message *** @ text @d86 1 a86 1 conformant (5.1) due to 5.5.10 Evaluable functors: d136 1 a136 1 7.3V5.13.12 d164 2 a166 1 (div)/2 yes a173 1 epsilon/0 9.7.3 9.7.3 yes d192 3 a194 3 vs. replacement atan/2. In 13211-1 there is already atan/1 thus the name atan2/2 might be preferable. @ 1.7 log @Correction Neng-Fa @ text @d113 1 a113 2 Functions with alternative names count as one in this tentative ranking. a114 1

d116 4 a119 2 system listed in this table are asked to provide an table with only the first row and one row for their system. d125 1 a125 1 core d127 7 a133 4 pllib B IF SICStus YAPSWI 2008-11-17 d146 5 a150 2 atan2/2 yes yesyes atan/2 9.5.6 9.5.6 yes d152 2 a153 3 (#)/2 yesyesyes (><)/29.4.6 9.4.6 yes xor/2 yes yes a155 1 gcd/2 9.3.9 9.3.9 yes yesyesyes a156 1 msb/1 yesyesyes d165 1 a169 1 (div)/2 yes @ 1.6 log @Neng-Fa's comments @ text @d118 2 a119 2 system listed in this table are asked to provide a table entry with only the first row and one row for their system. d143 1 a143 1 atan2/2 yesyes yesyes d183 3 a185 4 1 Original name: (#)/2 vs. replacement (><)/2. The original name is conflicting with constraints (unclear where exactly?). d189 3 a191 1 vs. replacement atan/2. @ 1.5 log @*** empty log message *** @ text @d5 1 a5 1 d160 1 a160 1 log/2 9.3.8 yes @ 1.4 log @*** empty log message *** @ text @d26 7 d53 1 d95 1 a95 1

d116 7 d132 1 a132 1 5 d136 1 a136 1 (+)/1 9.1 9.1 yesyesyesyesyes d145 1 d148 1 a148 1 e/0 9.7.2 9.7.2 yesyes yesyes a149 6 (div)/2 yes acosh/1 ? yesyesyes asinh/1 ? yesyes atanh/1 ? yesyes cosh/1 ? yesyesyes epsilon/0 9.7.3 9.7.3 yes a152 1 log/2 9.3.8 yes a153 1 signum/1 yes d155 1 d157 4 d166 1 d169 2 d175 1 a175 1 Further SICStus 3 @ 1.3 log @Corrections pllib @ text @d105 3 d128 2 d132 1 a136 2 atan2/2 yesyes yesyes atan/2 9.5.6 9.5.6 yes a138 1 e/0 9.7.2 9.7.2 yesyes yesyes d147 1 a147 1 tanh/1 ? yesyesyesyes @ 1.2 log @Spelling correction @ text @d131 1 a131 1 atan2/2 yes yesyes @ 1.1 log @Initial revision @ text @a73 4 This document provides an overview of the current practice of evaluable functors that are not part of 13211-1.

d76 10 a85 1 comparison (8.7). Definition of Floating point (7.1.3), ... d103 1 a103 19

(><)/2 - new name, old names collided with many uses

(^)/2 - missing for unbounded integers. Evidently the codifiers had with (**)/2 only bounded integers in mind. For them, it makes sense to produce a float value - as there would not be many possible values otherwise.

Criteria for inclusion

d117 8 a126 1 (+)/1 9.1 9.1 yesyesyesyesyes a128 1 acos/1 9.5.5 9.5.5 yesyesyesyesyesyes a129 1 asin/1 9.5.4 9.5.4 yesyesyesyesyesyes d131 1 a132 1 atan2/2 yes yesyes a133 1 ceil/1 yes a137 1 expm1/1 yes a138 1 lgamma/1 yes d140 1 a140 5 log/2 9.3.8 yes yes log1p/1 ? lsb/1 yes max/2 9.3.119.3.11yesyesyesyesyesyes min/2 9.3.109.3.10yesyesyesyesyesyes a141 3 pi/0 9.7.1 9.7.1 yesyesyes yesyes popcount/1 yes powm/3 yes a143 1 tan/1 9.5.3 9.5.3 yesyesyesyesyes d145 7 d161 36 @