X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=src%2Fscheme-primitives.4th;h=ba48b9e365a0f99ae7af8a6e241eecabb3d2e9d0;hb=3055ae2e3d57ec91a4187a6c5cf8f05357d60810;hp=928931901cfe3a387dbdf0cfeca28ce2a0d4d963;hpb=631c05ef31816dfd2c7e8ea0f19a008a1e732605;p=scheme.forth.jl.git diff --git a/src/scheme-primitives.4th b/src/scheme-primitives.4th index 9289319..ba48b9e 100644 --- a/src/scheme-primitives.4th +++ b/src/scheme-primitives.4th @@ -20,6 +20,10 @@ flonum-type istype? -rot 2drop boolean-type ; 1 make-fa-primitive flonum? +:noname ( args -- boolobj ) + ratnum-type istype? -rot 2drop boolean-type +; 1 make-fa-primitive ratnum? + :noname ( args -- boolobj ) character-type istype? -rot 2drop boolean-type ; 1 make-fa-primitive char? @@ -151,7 +155,7 @@ \ }}} -\ ==== Primitivle Arithmetic ==== {{{ +\ ==== Numeric types ==== {{{ \ --- Fixnums --- @@ -219,10 +223,13 @@ swap negate swap ; 1 make-fa-primitive fix:neg -( Find the GCD of n1 and n2 where n2 < n1. ) -: gcd ( n1 n2 -- m ) - -; +:noname ( fixnum -- -fixnum ) + swap abs swap +; 1 make-fa-primitive fix:abs + +:noname ( fixnum fixnum -- fixnum' ) + drop swap drop gcd fixnum-type +; 2 make-fa-primitive fix:gcd \ --- Flonums --- @@ -279,6 +286,10 @@ ; 1 make-fa-primitive flo:finite? +:noname ( flonum -- flonum ) + swap -1.0 f* swap +; 1 make-fa-primitive flo:neg + :noname ( flonum -- flonum ) swap fabs swap ; 1 make-fa-primitive flo:abs @@ -327,6 +338,56 @@ swap floor swap ; 1 make-fa-primitive flo:floor +:noname ( flonum -- flonum ) + swap ceiling swap +; 1 make-fa-primitive flo:ceiling + +:noname ( flonum -- flonum ) + swap truncate swap +; 1 make-fa-primitive flo:truncate + +:noname ( flonum -- flonum ) + swap fround swap +; 1 make-fa-primitive flo:round + +:noname ( flonum -- flonum ) + drop floor f->i fixnum-type +; 1 make-fa-primitive flo:floor->exact + +:noname ( flonum -- flonum ) + drop ceiling f->i fixnum-type +; 1 make-fa-primitive flo:ceiling->exact + +:noname ( flonum -- flonum ) + drop truncate f->i fixnum-type +; 1 make-fa-primitive flo:truncate->exact + +:noname ( flonum -- flonum ) + drop f->i fixnum-type +; 1 make-fa-primitive flo:round->exact + +:noname ( flonum flonum -- flonum ) + drop swap drop f/ fatan flonum-type +; 2 make-fa-primitive flo:atan2 + +\ --- Rationals --- + +' make-rational 2 make-fa-primitive make-rational + +:noname ( ratnum -- fixnum ) + drop pair-type car +; 1 make-fa-primitive rat:numerator + +:noname ( ratnum -- fixnum ) + drop pair-type cdr +; 1 make-fa-primitive rat:denominator + +\ --- Conversion --- + +:noname ( fixnum -- flonum ) + drop i->f flonum-type +; 1 make-fa-primitive fixnum->flonum + \ }}} \ ==== Pairs and Lists ==== {{{