X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=scheme-primitives.4th;h=1d2e21cce5fad83704e5d38776a28e55a1995945;hb=5241c399e654d473a6e86135937ed7af7965d0a2;hp=b347d8add9b005cb67e2d92d10bc43412daa0b81;hpb=e2e8c8f6d1d43e1044b91080f4cd3922fcd99472;p=scheme.forth.jl.git diff --git a/scheme-primitives.4th b/scheme-primitives.4th index b347d8a..1d2e21c 100644 --- a/scheme-primitives.4th +++ b/scheme-primitives.4th @@ -64,34 +64,39 @@ drop character-type ; make-primitive integer->char -: num-to-charlist ( num -- charlist ) - ?dup 0= if +: fixnum-to-charlist ( fixnum -- charlist ) + over 0= if + 2drop [char] 0 character-type nil cons exit then - nil rot + nil 2swap ( charlist fixnum ) begin - ?dup 0> + over 0> while - dup 10 mod swap 10 / swap - 2swap rot - [char] 0 + character-type 2swap - cons - rot + 2dup swap 10 mod swap ( charlist fixnum fixnummod ) + 2swap swap 10 / swap ( charlist fixnummod fixnumdiv ) + -2rot ( fixnumdiv charlist fixnummod ) + + drop [char] 0 + character-type 2swap + cons ( fixnumdiv newcharlist ) + + 2swap repeat + + 2drop ; :noname ( args -- string ) 2dup 1 ensure-arg-count car fixnum-type ensure-arg-type - drop + 2dup swap abs swap - dup 0< swap abs ( bool num ) - num-to-charlist - rot if + fixnum-to-charlist ( fixnum charlist ) + 2swap drop 0< if [char] - character-type 2swap cons then