number->string works.
[scheme.forth.jl.git] / scheme-primitives.4th
index 4cba91e..a9ea386 100644 (file)
     drop fixnum-type
 ; make-primitive char->integer
 
-:noname ( args -- fixnum )
+:noname ( args -- char )
     2dup 1 ensure-arg-count
     car fixnum-type ensure-arg-type
 
     drop character-type
 ; make-primitive integer->char
 
-( = Arithmeic = )
+: build-fixnum-charlist ( num )
+    ?dup 0= if
+        [char] 0 character-type nil cons
+        exit
+    then
+
+    nil rot
+
+    begin
+        ?dup 0>
+    while
+        dup 10 mod swap 10 / swap
+        2swap rot
+        [char] 0 + character-type 2swap
+        cons
+        rot
+    repeat
+;
+
+:noname ( args -- string )
+    2dup 1 ensure-arg-count
+    car fixnum-type ensure-arg-type
+
+    drop
+
+    dup 0< swap abs ( bool num )
+    build-fixnum-charlist
+    rot if
+        [char] - character-type 2swap cons
+    then
+
+    drop string-type
+; make-primitive number->string
+
+( = Arithmetic = )
 
 : add-prim ( args -- fixnum )
     2dup nil objeq? if