: eval ( "X" -- X )
parse call ;
-: base> ( str base -- num )
- #! Parse a number in a specified base.
+: parse-number* ( str base -- num )
+ #! Convert a string to a number. Return f if conversion
+ #! fails.
[ "java.lang.String" "int" ]
"factor.math.NumberParser"
"parseNumber"
jinvoke-static ;
-: bin> ( str -- num )
- #! Convert a binary string to a number.
- 2 base> ;
-
-: oct> ( str -- num )
- #! Convert an octal string to a number.
- 8 base> ;
-
-: dec> ( str -- num )
- #! Convert a decimal string to a number.
- 10 base> ;
-
-: hex> ( str -- num )
- #! Convert a hexadecimal string to a number.
- 16 base> ;
+: parse-number 10 parse-number* ;
-! Something really sucks about these words here
-: parse-number ( str -- num ) dec> ;
+: not-a-number "Not a number" throw ;
-: str>number ( str -- num )
- dup "base" get base> dup [
- nip
- ] [
- drop "Not a number: " swap cat2 throw
- ] ifte ;
+: base> ( str base -- num )
+ #! Convert a string to a number. Throw an error if
+ #! conversion fails.
+ parse-number* [ not-a-number ] unless* ;
+
+: bin> 2 base> ;
+: oct> 8 base> ;
+: dec> 10 base> ;
+: hex> 16 base> ;
+: str>number dec> ;
: BASE: ( base -- )
#! Read a number in a specific base.
- scan swap str>integer parsed ;
+ scan swap base> parsed ;
: HEX: 16 BASE: ; parsing
: DEC: 10 BASE: ; parsing
+++ /dev/null
-IN: scratchpad
-USE: math
-USE: test
-
-[ 2 ] [ 0 multiplier ] unit-test
-[ 4 ] [ 1 multiplier ] unit-test
-
-[ [ 1 4 1 ] ] [ 3 multipliers ] unit-test
-[ [ 1 4 2 4 1 ] ] [ 5 multipliers ] unit-test
-[ [ 1 4 2 4 2 4 1 ] ] [ 7 multipliers ] unit-test
-
-[ [ 0 5 10 ] ] [ 0 10 3 x-values ] unit-test
-[ [ 10 15 20 ] ] [ 10 20 3 x-values ] unit-test
-
-[ [ 0 1 4 9 16 ] ] [ 0 4 5 [ sq ] y-values ] unit-test
-
-[ 5/3 ] [ 10 20 3 h ] unit-test
-
-[ 1000/3 ] [ 0 10 3 [ sq ] simpson ] unit-test