Primitive ratnum operations implemented.
[scheme.forth.jl.git] / src / scheme-primitives.4th
index 7e123f7..ba48b9e 100644 (file)
     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?
     swap abs swap
 ; 1 make-fa-primitive fix:abs
 
-: sort-pair
-    2dup > if
-        swap
-    then
-;
-
-( Find the GCD of n1 and n2 where n2 < n1. )
-: gcd ( n1 n2 -- m )
-    sort-pair
-    over 0= if
-        swap drop
-    else
-        over mod
-        recurse
-    then
-;
-
 :noname ( fixnum fixnum -- fixnum' )
     drop swap drop gcd fixnum-type
 ; 2 make-fa-primitive fix:gcd
     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 ---