From 2ecd1ba127ab1144448c553aef6984bef89d6219 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 10 Feb 2008 01:40:17 -0600 Subject: [PATCH] Improve ratio syntax --- core/math/parser/parser.factor | 11 +++++++---- extra/math/ratios/ratios-tests.factor | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/math/parser/parser.factor b/core/math/parser/parser.factor index 64ce296a0b..68c4768c87 100755 --- a/core/math/parser/parser.factor +++ b/core/math/parser/parser.factor @@ -41,6 +41,9 @@ DEFER: base> ) ( str -- n ) radix get base> ; : whole-part ( str -- m n ) - "+" split1 >r (base>) r> + sign split1 >r (base>) r> dup [ (base>) ] [ drop 0 swap ] if ; : string>ratio ( str -- a/b ) @@ -70,7 +73,7 @@ PRIVATE> : base> ( str radix -- n/f ) [ - "-" ?head >r + "-" ?head dup negative? set >r { { [ CHAR: / over member? ] [ string>ratio ] } { [ CHAR: . over member? ] [ string>float ] } @@ -114,9 +117,9 @@ M: integer >base M: ratio >base [ [ - dup 0 < [ "-" % neg ] when + dup 0 < dup negative? set [ "-" % neg ] when 1 /mod - >r dup zero? [ drop ] [ (>base) % "+" % ] if r> + >r dup zero? [ drop ] [ (>base) % sign % ] if r> dup numerator (>base) % "/" % denominator (>base) % diff --git a/extra/math/ratios/ratios-tests.factor b/extra/math/ratios/ratios-tests.factor index 858a7b0544..4dba49b908 100755 --- a/extra/math/ratios/ratios-tests.factor +++ b/extra/math/ratios/ratios-tests.factor @@ -107,6 +107,6 @@ unit-test unit-test [ 3 ] [ "1+1/2" string>number 2 * ] unit-test -[ -3 ] [ "-1+1/2" string>number 2 * ] unit-test +[ -3 ] [ "-1-1/2" string>number 2 * ] unit-test [ "2+1/7" ] [ 1 7 / 2 + number>string ] unit-test [ "1/8" ] [ 1 8 / number>string ] unit-test