The tuple is defined ...

TUPLE: matrix
 { coefficient initial: 1 }
 { #rows integer initial: 0 }
 { #cols integer initial: 0 }
 { data } ;

The idea is to store an n-by-m matrix as a flat sequence, instead of an
array of arrays.

To accomplish this we map element subscripts, (row, col), to a single index
in the flat sequence, data.

Referencing each matrix element with a single index in a flat sequence, we
should be able to use normal sequence operations like map and filter.

The trick is to get the mapping right.

Might go something like this ...

:: ij-to-n ( row col -- n )
      row #cols * col + ;

:: n-to-ij ( n -- row col )
     col - #cols / ;

: in-row? ( n col -- ? )
     swap n-to-ij drop = ;

: in-col? ( n col -- ? )
     swap n-to-ij swap drop = ;

: get-row ( row -- seq )
   data [ in-row? ] filter-index ;

: get-col ( col -- seq )
   data [ in-col? ] filter-index ;

:: in-minor? ( m n -- ? )
   m n in-row? not m n in-col? not and ;

: get-minor ( n -- seq )
   data [ in-minor? ] filter-index ;

That's just a rough draft without references to real accessors.

Before going that far, not sure how to define constructors and make-matrix.

Any ideas are welcome.

 - Leonard
------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to