All external words are in the vocabulary math-contrib, while internal words are in their respective filename-internal
Moved dimensional analysis files to contrib/units
+IN: analysis-internals
USING: kernel sequences errors namespaces math ;
-USING: test ;
-
-IN: math-internals
: Z:(-inf,0]? ( n -- bool )
#! nonpositive integer
: gamma-neg ( gamma[abs[x]] x -- gamma[x] )
dup pi * sin * * pi neg swap / ; inline
-IN: math
+IN: math-contrib
: gamma ( x -- gamma[x] )
#! gamma(x) = integral 0..inf [ t^(x-1) exp(-t) ] dt
-USING: kernel sequences errors namespaces ;
-USING: test ;
-IN: math
+IN: math-contrib
+USING: kernel sequences errors namespaces math ;
: (0..n] ( n -- (0..n] ) 1+ 1 swap <range> ; inline
: [1..n] ( n -- [1..n] ) (0..n] ; inline
+++ /dev/null
-USING: kernel math dimensional-analysis units ;
-! From: http://physics.nist.gov/constants
-
-IN: physical-constants
-! speed of light in vacuum
-: c 299792458 m/s ;
-! : c0 299792458:m/s ; ! same as c
-! : c-vacuum 299792458:m/s ; ! same as c
-
+++ /dev/null
-USING: physical-constants conversions ;
-USING: kernel prettyprint io sequences words lists vectors inspector math errors ;
-IN: dimensional-analysis
-
-
-IN: sequences
-: seq-diff ( seq1 seq2 -- seq2-seq1 )
- [ swap member? not ] subset-with ; flushable
-
-: seq-intersect ( seq1 seq2 -- seq1/\seq2 )
- [ swap member? ] subset-with ; flushable
-
-IN: dimensional-analysis
-
-TUPLE: dimensioned val top bot ;
-C: dimensioned
- [ set-dimensioned-bot ] keep
- [ set-dimensioned-top ] keep
- over number? [ "dimensioned must be a number" throw ] unless
- [ set-dimensioned-val ] keep ;
-
-: remove-one ( obj seq -- seq )
- [ index ] keep over -1 = [
- 2drop
- ] [
- [ 0 -rot <slice> ] 2keep
- >r 1+ r> [ length ] keep <slice> append
- ] if ;
-
-
-: dimensions ( dimensioned -- top bot )
- dup >r dimensioned-top r> dimensioned-bot ;
-
-: 2remove-one ( obj seq seq -- seq seq )
- pick swap remove-one >r remove-one r> ;
-
-: symbolic-reduce ( seq seq -- seq seq )
- [ seq-intersect ] 2keep rot dup empty? [
- drop
- ] [
- first -rot 2remove-one symbolic-reduce
- ] if ;
-
-: reduce-units ( dimensioned -- )
- dup dimensions symbolic-reduce pick set-dimensioned-bot swap set-dimensioned-top ;
-
-: 2reduce-units ( d d -- )
- >r dup reduce-units r> dup reduce-units ;
-
-: 2val ( d d -- )
- >r dimensioned-val r> dimensioned-val ;
-
-: =units?
- >r dimensions 2list r> dimensions 2list = ;
-
-
-: d+ ( d d -- )
- 2dup =units? [
- "d+: dimensions must be the same" throw
- ] unless
- dup dimensions
- >r >r 2val + r> r> <dimensioned> ;
-
-: d- ( d d -- )
- 2dup =units? [
- "d-: dimensions must be the same" throw
- ] unless
- dup dimensions
- >r >r 2val - r> r> <dimensioned> ;
-
-: add-dimensions ( d d -- d )
- >r dimensions r> dimensions >r swap >r append r> r> append 0 -rot <dimensioned> ;
-
-: (d*)
- >r add-dimensions r> over set-dimensioned-val dup reduce-units ;
-
-: d* ( d d -- )
- 2dup 2val * (d*) ;
-
-: d/ ( d d -- )
- 2dup 2val / (d*) ;
-
-
"contrib/math/polynomial.factor"
"contrib/math/quaternions.factor"
"contrib/math/matrices.factor"
-
- ! "contrib/math/dimensional-analysis.factor"
- ! "contrib/math/units.factor"
- ! "contrib/math/constants.factor"
] [ run-file ] each
+"math-contrib" words [ try-compile ] each
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
-IN: math
-USING: arrays generic kernel sequences ;
+IN: math-contrib
+USING: arrays generic kernel sequences math ;
! Matrices
: zero-matrix ( m n -- matrix )
+IN: polynomial-internals
USING: kernel sequences vectors math math-internals namespaces ;
-USING: prettyprint inspector io test ;
-
-! p+ p- n*p p* p/mod pgcd
-
-IN: math
-: max-length ( seq seq -- n )
- [ length ] 2apply max ; flushable
-
-IN: math-internals
: 2length ( seq seq -- ) [ length ] 2apply ;
: zero-vector ( n -- vector ) 0 <repeated> >vector ;
: pextend ( p p -- p p )
2dup 2zero-extend ;
-IN: math
+IN: math-contrib
: p= ( p p -- )
pextend = ;
: p-sq ( p -- p-sq )
dup p* ;
-IN: math-internals
+IN: polynomial-internals
: pop-front ( seq -- seq )
1 swap tail ;
! Quaternions are represented as pairs of complex numbers,
! using the identity: (a+bi)+(c+di)j = a+bi+cj+dk.
USING: arrays kernel math sequences ;
-IN: math-internals
+IN: quaternions-internals
: 2q [ first2 ] 2apply ; inline
: q*b 2q >r ** swap r> * + ; inline
-IN: math
+IN: math-contrib
: q* ( u v -- u*v )
#! Multiply quaternions.
+++ /dev/null
-USING: math dimensional-analysis ;
-IN: units
-
-SYMBOL: mm
-SYMBOL: cm
-SYMBOL: dm
-SYMBOL: m
-SYMBOL: km
-
-: mm>m 1000 / ;
-: m>mm 1000 * ;
-
-: cm>m 100 / ;
-: m>cm 100 * ;
-
-: dm>m 10 / ;
-: m>dm 10 * ;
-
-: km>m 1000 * ;
-: m>km 1000 / ;
-
-SYMBOL: ms
-SYMBOL: s
-
-: ms>s 1000 / ;
-: s>ms 1000 * ;
-
-
-: m { m } { } <dimensioned> ;
-: km { km } { } <dimensioned> ;
-
-: ms { ms } { } <dimensioned> ;
-: s { s } { } <dimensioned> ;
-
-: m/s { m } { s } <dimensioned> ;
-: m/s^2 { m } { s s } <dimensioned> ;
-
-SYMBOL: kg
-: kg { kg } { } <dimensioned> ;
-
-! SYMBOL: N ! newtons
-! : N { N } { } <dimensioned> ;
-
-
-! Autogenerated plz
-
-: mm>km mm>m m>km ; ! : mm>km 1000 / 1000 / ;
-IN: math
+IN: math-contrib
USING: errors kernel sequences ;
: deg>rad pi * 180 / ; inline