Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
58
Task/Optional-parameters/Factor/optional-parameters.factor
Normal file
58
Task/Optional-parameters/Factor/optional-parameters.factor
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
USING: accessors combinators io kernel math.order prettyprint
|
||||
sequences sorting ;
|
||||
|
||||
TUPLE: table-sorter
|
||||
data
|
||||
{ column initial: 0 }
|
||||
reversed?
|
||||
{ ordering initial: [ ] } ;
|
||||
|
||||
: <table-sorter> ( -- obj ) table-sorter new ;
|
||||
|
||||
: sort-table ( table-sorter -- matrix )
|
||||
{
|
||||
[ data>> ]
|
||||
[ column>> [ swap nth ] curry ]
|
||||
[ ordering>> compose ]
|
||||
[ reversed?>> [ >=< ] [ <=> ] ? [ bi@ ] prepose curry ]
|
||||
} cleave [ sort ] curry call( x -- x ) ;
|
||||
|
||||
|
||||
! ===== Now we can use the interface defined above =====
|
||||
|
||||
CONSTANT: table
|
||||
{ { "a" "b" "c" } { "" "q" "z" } { "can" "z" "a" } }
|
||||
|
||||
"Unsorted" print
|
||||
table simple-table.
|
||||
|
||||
"Default sort" print
|
||||
<table-sorter>
|
||||
table >>data
|
||||
sort-table simple-table.
|
||||
|
||||
"Sorted by col 2" print
|
||||
<table-sorter>
|
||||
table >>data
|
||||
2 >>column
|
||||
sort-table simple-table.
|
||||
|
||||
"Sorted by col 1" print
|
||||
<table-sorter>
|
||||
table >>data
|
||||
1 >>column
|
||||
sort-table simple-table.
|
||||
|
||||
"Reverse sorted by col 1" print
|
||||
<table-sorter>
|
||||
table >>data
|
||||
1 >>column
|
||||
t >>reversed?
|
||||
sort-table simple-table.
|
||||
|
||||
"Sorted by decreasing length" print
|
||||
<table-sorter>
|
||||
table >>data
|
||||
t >>reversed?
|
||||
[ length ] >>ordering
|
||||
sort-table simple-table.
|
||||
Loading…
Add table
Add a link
Reference in a new issue