matrix library simplification; other code cleanups
parent
d7dfeea419
commit
e33fca9fe7
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
<ul>Everything else:
|
<ul>Everything else:
|
||||||
<li>Object slots are now clickable in the inspector</li>
|
<li>Object slots are now clickable in the inspector</li>
|
||||||
|
<li>The matrices library has been greatly simplified. Matrices are now represented as vectors of vectors, and matrix words have been moved to the <code>math</code> vocabulary.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h1>Factor 0.76:</h1>
|
<h1>Factor 0.76:</h1>
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ parser prettyprint sequences io vectors words ;
|
||||||
|
|
||||||
"Bootstrap stage 1..." print
|
"Bootstrap stage 1..." print
|
||||||
|
|
||||||
"/library/bootstrap/primitives.factor" run-resource
|
|
||||||
|
|
||||||
: pull-in ( list -- ) [ dup print parse-resource % ] each ;
|
: pull-in ( list -- ) [ dup print parse-resource % ] each ;
|
||||||
|
|
||||||
|
"/library/bootstrap/primitives.factor" run-resource
|
||||||
|
|
||||||
! The make-list form creates a boot quotation
|
! The make-list form creates a boot quotation
|
||||||
[
|
[
|
||||||
[
|
{
|
||||||
"/version.factor"
|
"/version.factor"
|
||||||
|
|
||||||
"/library/stack.factor"
|
"/library/stack.factor"
|
||||||
|
|
@ -114,7 +114,7 @@ parser prettyprint sequences io vectors words ;
|
||||||
"/library/cli.factor"
|
"/library/cli.factor"
|
||||||
|
|
||||||
"/library/tools/memory.factor"
|
"/library/tools/memory.factor"
|
||||||
] pull-in
|
} pull-in
|
||||||
] make-list
|
] make-list
|
||||||
|
|
||||||
"object" [ "generic" ] search
|
"object" [ "generic" ] search
|
||||||
|
|
@ -141,7 +141,7 @@ reveal
|
||||||
recrossref
|
recrossref
|
||||||
] %
|
] %
|
||||||
|
|
||||||
[
|
{
|
||||||
"/library/generic/generic.factor"
|
"/library/generic/generic.factor"
|
||||||
"/library/generic/slots.factor"
|
"/library/generic/slots.factor"
|
||||||
"/library/generic/object.factor"
|
"/library/generic/object.factor"
|
||||||
|
|
@ -153,7 +153,7 @@ reveal
|
||||||
"/library/generic/tuple.factor"
|
"/library/generic/tuple.factor"
|
||||||
|
|
||||||
"/library/bootstrap/init.factor"
|
"/library/bootstrap/init.factor"
|
||||||
] pull-in
|
} pull-in
|
||||||
|
|
||||||
[
|
[
|
||||||
"Building generics..." print
|
"Building generics..." print
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ vocabularies
|
||||||
|
|
||||||
<namespace> vocabularies set
|
<namespace> vocabularies set
|
||||||
<namespace> typemap set
|
<namespace> typemap set
|
||||||
num-types <vector> builtins set
|
num-types empty-vector builtins set
|
||||||
<namespace> crossref set
|
<namespace> crossref set
|
||||||
|
|
||||||
vocabularies get [
|
vocabularies get [
|
||||||
|
|
@ -33,11 +33,10 @@ vocabularies get [
|
||||||
"infer-effect" set-word-prop
|
"infer-effect" set-word-prop
|
||||||
] ifte ;
|
] ifte ;
|
||||||
|
|
||||||
: make-primitive ( n { vocab word effect } -- n )
|
: make-primitive ( { vocab word effect } n -- )
|
||||||
[ 2unseq create >r 1 + r> over f define ] keep
|
>r dup 2unseq create r> f define set-stack-effect ;
|
||||||
set-stack-effect ;
|
|
||||||
|
|
||||||
2 {
|
{
|
||||||
{ "execute" "words" [ [ word ] [ ] ] }
|
{ "execute" "words" [ [ word ] [ ] ] }
|
||||||
{ "call" "kernel" [ [ general-list ] [ ] ] }
|
{ "call" "kernel" [ [ general-list ] [ ] ] }
|
||||||
{ "ifte" "kernel" [ [ object general-list general-list ] [ ] ] }
|
{ "ifte" "kernel" [ [ object general-list general-list ] [ ] ] }
|
||||||
|
|
@ -207,9 +206,9 @@ vocabularies get [
|
||||||
{ "fflush" "io-internals" [ [ alien ] [ ] ] }
|
{ "fflush" "io-internals" [ [ alien ] [ ] ] }
|
||||||
{ "fclose" "io-internals" [ [ alien ] [ ] ] }
|
{ "fclose" "io-internals" [ [ alien ] [ ] ] }
|
||||||
{ "expired?" "alien" [ [ object ] [ boolean ] ] }
|
{ "expired?" "alien" [ [ object ] [ boolean ] ] }
|
||||||
} [
|
} dup length 3 swap [ + ] map-with [
|
||||||
make-primitive
|
make-primitive
|
||||||
] each drop
|
] 2each
|
||||||
|
|
||||||
! These need a more descriptive comment.
|
! These need a more descriptive comment.
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,21 +5,6 @@
|
||||||
IN: kernel-internals
|
IN: kernel-internals
|
||||||
USING: errors kernel math math-internals sequences ;
|
USING: errors kernel math math-internals sequences ;
|
||||||
|
|
||||||
: assert-positive ( fx -- )
|
|
||||||
0 fixnum<
|
|
||||||
[ "Sequence index must be positive" throw ] when ; inline
|
|
||||||
|
|
||||||
: assert-bounds ( fx seq -- )
|
|
||||||
over assert-positive
|
|
||||||
length fixnum>=
|
|
||||||
[ "Sequence index out of bounds" throw ] when ; inline
|
|
||||||
|
|
||||||
: bounds-check ( n seq -- fixnum seq )
|
|
||||||
>r >fixnum r> 2dup assert-bounds ; inline
|
|
||||||
|
|
||||||
: growable-check ( n seq -- fixnum seq )
|
|
||||||
>r >fixnum dup assert-positive r> ; inline
|
|
||||||
|
|
||||||
GENERIC: underlying
|
GENERIC: underlying
|
||||||
GENERIC: set-underlying
|
GENERIC: set-underlying
|
||||||
GENERIC: set-capacity
|
GENERIC: set-capacity
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,9 @@ M: object empty? ( seq -- ? ) length 0 = ;
|
||||||
|
|
||||||
M: object >list ( seq -- list ) dup length 0 rot (>list) ;
|
M: object >list ( seq -- list ) dup length 0 rot (>list) ;
|
||||||
|
|
||||||
|
: conj ( v -- ? ) [ ] all? ;
|
||||||
|
: disj ( v -- ? ) [ ] contains? ;
|
||||||
|
|
||||||
: index ( obj seq -- n ) [ = ] find-with drop ;
|
: index ( obj seq -- n ) [ = ] find-with drop ;
|
||||||
: index* ( obj i seq -- n ) [ = ] find-with* drop ;
|
: index* ( obj i seq -- n ) [ = ] find-with* drop ;
|
||||||
: member? ( obj seq -- ? ) [ = ] contains-with? ;
|
: member? ( obj seq -- ? ) [ = ] contains-with? ;
|
||||||
|
|
|
||||||
|
|
@ -66,3 +66,14 @@ G: find* ( i seq quot -- i elt | quot: elt -- ? )
|
||||||
|
|
||||||
: 3unseq ( { x y z } -- x y z )
|
: 3unseq ( { x y z } -- x y z )
|
||||||
dup first over second rot third ;
|
dup first over second rot third ;
|
||||||
|
|
||||||
|
TUPLE: bounds-error index seq ;
|
||||||
|
: bounds-error <bounds-error> throw ;
|
||||||
|
|
||||||
|
: growable-check ( n seq -- fx seq )
|
||||||
|
>r >fixnum dup 0 fixnum<
|
||||||
|
[ r> 2dup bounds-error ] [ r> ] ifte ; inline
|
||||||
|
|
||||||
|
: bounds-check ( n seq -- fx seq )
|
||||||
|
growable-check 2dup length fixnum>=
|
||||||
|
[ 2dup bounds-error ] when ; inline
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,6 @@ M: object thaw >vector ;
|
||||||
|
|
||||||
M: vector clone ( vector -- vector ) >vector ;
|
M: vector clone ( vector -- vector ) >vector ;
|
||||||
|
|
||||||
: zero-vector ( n -- vector ) 0 <repeated> >vector ;
|
|
||||||
|
|
||||||
M: general-list like drop >list ;
|
M: general-list like drop >list ;
|
||||||
|
|
||||||
M: range like drop >vector ;
|
M: range like drop >vector ;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
! Copyright (C) 2005 Slava Pestov.
|
! Copyright (C) 2005 Slava Pestov.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
IN: matrices
|
IN: math
|
||||||
USING: errors generic kernel lists math namespaces sequences
|
USING: kernel sequences vectors ;
|
||||||
vectors ;
|
|
||||||
|
|
||||||
! Vectors
|
! Vectors
|
||||||
|
: zero-vector ( n -- vector ) 0 <repeated> >vector ;
|
||||||
|
|
||||||
: vneg ( v -- v ) [ neg ] map ;
|
: vneg ( v -- v ) [ neg ] map ;
|
||||||
|
|
||||||
: n*v ( n v -- v ) [ * ] map-with ;
|
: n*v ( n v -- v ) [ * ] map-with ;
|
||||||
|
|
@ -29,13 +30,12 @@ vectors ;
|
||||||
|
|
||||||
: sum ( v -- n ) 0 [ + ] reduce ;
|
: sum ( v -- n ) 0 [ + ] reduce ;
|
||||||
: product ( v -- n ) 1 [ * ] reduce ;
|
: product ( v -- n ) 1 [ * ] reduce ;
|
||||||
: conj ( v -- ? ) [ ] all? ;
|
|
||||||
: disj ( v -- ? ) [ ] contains? ;
|
|
||||||
|
|
||||||
: set-axis ( x y axis -- v )
|
: set-axis ( x y axis -- v )
|
||||||
2dup v* >r >r drop dup r> v* v- r> v+ ;
|
2dup v* >r >r drop dup r> v* v- r> v+ ;
|
||||||
|
|
||||||
: v. ( v v -- x ) 0 -rot [ conjugate * + ] 2each ;
|
: v. ( v v -- x ) 0 -rot [ * + ] 2each ; inline
|
||||||
|
: c. ( v v -- x ) 0 -rot [ conjugate * + ] 2each ;
|
||||||
|
|
||||||
: norm-sq ( v -- n ) 0 [ absq + ] reduce ;
|
: norm-sq ( v -- n ) 0 [ absq + ] reduce ;
|
||||||
|
|
||||||
|
|
@ -84,8 +84,8 @@ vectors ;
|
||||||
: m> ( m m -- m ) [ v> ] 2map ;
|
: m> ( m m -- m ) [ v> ] 2map ;
|
||||||
: m>= ( m m -- m ) [ v>= ] 2map ;
|
: m>= ( m m -- m ) [ v>= ] 2map ;
|
||||||
|
|
||||||
: v.m ( v m -- v ) <flipped> [ v. ] map-with ;
|
: v.m ( v m -- v ) <flipped> [ v. ] map-with ; inline
|
||||||
: m.v ( m v -- v ) swap [ v. ] map-with ;
|
: m.v ( m v -- v ) swap [ v. ] map-with ; inline
|
||||||
: m. ( m m -- m ) >r <flipped> r> [ m.v ] map-with ;
|
: m. ( m m -- m ) <flipped> swap [ m.v ] map-with ;
|
||||||
|
|
||||||
: trace ( matrix -- tr ) 0 swap <diagonal> product ;
|
: trace ( matrix -- tr ) 0 swap <diagonal> product ;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ USING: kernel lists math parser sequences syntax vectors ;
|
||||||
|
|
||||||
! Complex numbers
|
! Complex numbers
|
||||||
: #{ f ; parsing
|
: #{ f ; parsing
|
||||||
: }# dup first swap second rect> swons ; parsing
|
: }# dup second swap first rect> swons ; parsing
|
||||||
|
|
||||||
! Reading integers in other bases
|
! Reading integers in other bases
|
||||||
: (BASE) ( base -- )
|
: (BASE) ( base -- )
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ USING: gadgets namespaces styles test ;
|
||||||
[ 0 100 0 { 255 0 0 } ]
|
[ 0 100 0 { 255 0 0 } ]
|
||||||
[ { 0 1 0 } red green <gradient> { 100 200 0 } 0 (gradient-x) ] unit-test
|
[ { 0 1 0 } red green <gradient> { 100 200 0 } 0 (gradient-x) ] unit-test
|
||||||
|
|
||||||
[ 0 100 100 [ 255/2 255/2 0 ] ]
|
[ 0 100 100 { 255/2 255/2 0 } ]
|
||||||
[ { 0 1 0 } red green <gradient> { 100 200 0 } 100 (gradient-x) ] unit-test
|
[ { 0 1 0 } red green <gradient> { 100 200 0 } 100 (gradient-x) ] unit-test
|
||||||
|
|
||||||
[ 0 0 200 { 255 0 0 } ]
|
[ 0 0 200 { 255 0 0 } ]
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,6 @@ USE: test
|
||||||
USE: strings
|
USE: strings
|
||||||
USE: sequences
|
USE: sequences
|
||||||
|
|
||||||
[ { [ 3 2 1 ] [ 5 4 3 ] [ 6 ] } ]
|
|
||||||
|
|
||||||
[ [ "a" 43 [ ] ] ] [ [ "a" 43 43 43 [ ] 43 "a" [ ] ] prune ] unit-test
|
[ [ "a" 43 [ ] ] ] [ [ "a" 43 43 43 [ ] 43 "a" [ ] ] prune ] unit-test
|
||||||
|
|
||||||
[ "fdsfs" [ > ] sort ] unit-test-fails
|
[ "fdsfs" [ > ] sort ] unit-test-fails
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,4 @@ USE: test
|
||||||
: foo 1 2 3 ;
|
: foo 1 2 3 ;
|
||||||
|
|
||||||
[ 1 2 3 1 2 3 ] [ bar ] unit-test
|
[ 1 2 3 1 2 3 ] [ bar ] unit-test
|
||||||
[ [ [ 0 3 ] ] ] [ [ foo ] infer ] unit-test
|
[ [ 0 3 ] ] [ [ foo ] infer ] unit-test
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,13 @@ M: no-method error. ( error -- )
|
||||||
M: parse-error error. ( error -- )
|
M: parse-error error. ( error -- )
|
||||||
dup parse-dump delegate error. ;
|
dup parse-dump delegate error. ;
|
||||||
|
|
||||||
|
M: bounds-error error. ( error -- )
|
||||||
|
"Sequence index out of bounds" print
|
||||||
|
"Sequence: " write dup bounds-error-seq .
|
||||||
|
"Minimum: 0" print
|
||||||
|
"Maximum: " write dup bounds-error-seq length .
|
||||||
|
"Requested: " write bounds-error-index . ;
|
||||||
|
|
||||||
M: string error. ( error -- ) print ;
|
M: string error. ( error -- ) print ;
|
||||||
|
|
||||||
M: object error. ( error -- ) . ;
|
M: object error. ( error -- ) . ;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ M: array sheet unit ;
|
||||||
|
|
||||||
M: hashtable sheet dup hash-keys swap hash-values 2list ;
|
M: hashtable sheet dup hash-keys swap hash-values 2list ;
|
||||||
|
|
||||||
: column ( list -- list )
|
: format-column ( list -- list )
|
||||||
[ unparse ] map
|
[ unparse ] map
|
||||||
[ max-length ] keep
|
[ max-length ] keep
|
||||||
[ swap CHAR: \s pad-right ] map-with ;
|
[ swap CHAR: \s pad-right ] map-with ;
|
||||||
|
|
@ -33,7 +33,7 @@ M: hashtable sheet dup hash-keys swap hash-values 2list ;
|
||||||
: format-sheet ( sheet -- list )
|
: format-sheet ( sheet -- list )
|
||||||
dup first length >vector swons
|
dup first length >vector swons
|
||||||
dup peek over first [ set ] 2each
|
dup peek over first [ set ] 2each
|
||||||
[ column ] map
|
[ format-column ] map
|
||||||
flip
|
flip
|
||||||
[ " | " join ] map ;
|
[ " | " join ] map ;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2005 Slava Pestov.
|
! Copyright (C) 2005 Slava Pestov.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
IN: gadgets
|
IN: gadgets
|
||||||
USING: generic kernel matrices ;
|
USING: generic kernel math ;
|
||||||
|
|
||||||
! Incremental layout allows adding lines to panes to be O(1).
|
! Incremental layout allows adding lines to panes to be O(1).
|
||||||
! Note that incremental packs are distinct from ordinary packs
|
! Note that incremental packs are distinct from ordinary packs
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue