interval-sets: some modernization.
parent
deea270b57
commit
1d8449115c
|
@ -20,7 +20,7 @@ HELP: interval-set
|
||||||
|
|
||||||
HELP: <interval-set>
|
HELP: <interval-set>
|
||||||
{ $values { "specification" "a sequence of numbers and pairs of numbers" } { "interval-set" interval-set } }
|
{ $values { "specification" "a sequence of numbers and pairs of numbers" } { "interval-set" interval-set } }
|
||||||
{ $description "Creates an interval set based on the specification. Pairs of numers are interpreted as intervals which include their endpoints, and individual numbers are interpreted to be in the set, in a singleton range." } ;
|
{ $description "Creates an interval set based on the specification. Pairs of numbers are interpreted as intervals which include their endpoints, and individual numbers are interpreted to be in the set, in a singleton range." } ;
|
||||||
|
|
||||||
HELP: in?
|
HELP: in?
|
||||||
{ $values { "key" integer } { "set" interval-set } { "?" { { $link t } " or " { $link f } } } }
|
{ $values { "key" integer } { "set" interval-set } { "?" { { $link t } " or " { $link f } } } }
|
||||||
|
|
|
@ -7,7 +7,7 @@ IN: interval-sets.tests
|
||||||
[ f ] [ 0 T{ interval-set } in? ] unit-test
|
[ f ] [ 0 T{ interval-set } in? ] unit-test
|
||||||
[ f ] [ 2 T{ interval-set } in? ] unit-test
|
[ f ] [ 2 T{ interval-set } in? ] unit-test
|
||||||
|
|
||||||
: i1 ( n -- ? )
|
: i1 ( -- set )
|
||||||
{ { 3 4 } } <interval-set> ;
|
{ { 3 4 } } <interval-set> ;
|
||||||
|
|
||||||
[ f ] [ 2 i1 in? ] unit-test
|
[ f ] [ 2 i1 in? ] unit-test
|
||||||
|
@ -15,9 +15,9 @@ IN: interval-sets.tests
|
||||||
[ t ] [ 4 i1 in? ] unit-test
|
[ t ] [ 4 i1 in? ] unit-test
|
||||||
[ f ] [ 5 i1 in? ] unit-test
|
[ f ] [ 5 i1 in? ] unit-test
|
||||||
|
|
||||||
CONSTANT: unicode-max HEX: 10FFFF
|
CONSTANT: unicode-max 0x10FFFF
|
||||||
|
|
||||||
: i2 ( n -- ? )
|
: i2 ( -- set )
|
||||||
{ { 3 4 } } <interval-set>
|
{ { 3 4 } } <interval-set>
|
||||||
unicode-max <interval-not> ;
|
unicode-max <interval-not> ;
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ CONSTANT: unicode-max HEX: 10FFFF
|
||||||
[ f ] [ 4 i2 in? ] unit-test
|
[ f ] [ 4 i2 in? ] unit-test
|
||||||
[ t ] [ 5 i2 in? ] unit-test
|
[ t ] [ 5 i2 in? ] unit-test
|
||||||
|
|
||||||
: i3 ( n -- ? )
|
: i3 ( -- set )
|
||||||
{ { 2 4 } } <interval-set>
|
{ { 2 4 } } <interval-set>
|
||||||
{ { 6 8 } } <interval-set>
|
{ { 6 8 } } <interval-set>
|
||||||
<interval-or> ;
|
<interval-or> ;
|
||||||
|
@ -41,7 +41,7 @@ CONSTANT: unicode-max HEX: 10FFFF
|
||||||
[ t ] [ 8 i3 in? ] unit-test
|
[ t ] [ 8 i3 in? ] unit-test
|
||||||
[ f ] [ 9 i3 in? ] unit-test
|
[ f ] [ 9 i3 in? ] unit-test
|
||||||
|
|
||||||
: i4 ( n -- ? )
|
: i4 ( -- set )
|
||||||
{ { 2 4 } } <interval-set>
|
{ { 2 4 } } <interval-set>
|
||||||
{ { 6 8 } } <interval-set>
|
{ { 6 8 } } <interval-set>
|
||||||
<interval-and> ;
|
<interval-and> ;
|
||||||
|
@ -56,7 +56,7 @@ CONSTANT: unicode-max HEX: 10FFFF
|
||||||
[ f ] [ 8 i4 in? ] unit-test
|
[ f ] [ 8 i4 in? ] unit-test
|
||||||
[ f ] [ 9 i4 in? ] unit-test
|
[ f ] [ 9 i4 in? ] unit-test
|
||||||
|
|
||||||
: i5 ( n -- ? )
|
: i5 ( -- set )
|
||||||
{ { 2 5 } } <interval-set>
|
{ { 2 5 } } <interval-set>
|
||||||
{ { 4 8 } } <interval-set>
|
{ { 4 8 } } <interval-set>
|
||||||
<interval-or> ;
|
<interval-or> ;
|
||||||
|
@ -71,7 +71,7 @@ CONSTANT: unicode-max HEX: 10FFFF
|
||||||
[ t ] [ 8 i5 in? ] unit-test
|
[ t ] [ 8 i5 in? ] unit-test
|
||||||
[ f ] [ 9 i5 in? ] unit-test
|
[ f ] [ 9 i5 in? ] unit-test
|
||||||
|
|
||||||
: i6 ( n -- ? )
|
: i6 ( -- set )
|
||||||
{ { 2 5 } } <interval-set>
|
{ { 2 5 } } <interval-set>
|
||||||
{ { 4 8 } } <interval-set>
|
{ { 4 8 } } <interval-set>
|
||||||
<interval-and> ;
|
<interval-and> ;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2009 Daniel Ehrenberg.
|
! Copyright (C) 2009 Daniel Ehrenberg.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel sequences binary-search accessors math.order
|
USING: accessors alien.c-types arrays assocs binary-search
|
||||||
specialized-arrays.uint make grouping math arrays
|
combinators fry grouping hints kernel locals make math
|
||||||
sorting assocs locals combinators fry hints ;
|
math.order sequences sorting specialized-arrays ;
|
||||||
|
SPECIALIZED-ARRAY: uint
|
||||||
IN: interval-sets
|
IN: interval-sets
|
||||||
! Sets of positive integers
|
! Sets of positive integers
|
||||||
|
|
||||||
|
@ -21,7 +22,7 @@ PRIVATE>
|
||||||
|
|
||||||
: in? ( key set -- ? )
|
: in? ( key set -- ? )
|
||||||
dupd find-interval
|
dupd find-interval
|
||||||
[ [ start ] [ end 1- ] bi between? ]
|
[ [ start ] [ end 1 - ] bi between? ]
|
||||||
[ drop f ] if* ;
|
[ drop f ] if* ;
|
||||||
|
|
||||||
HINTS: in? { integer interval-set } ;
|
HINTS: in? { integer interval-set } ;
|
||||||
|
@ -56,7 +57,7 @@ HINTS: in? { integer interval-set } ;
|
||||||
interval-set boa ;
|
interval-set boa ;
|
||||||
|
|
||||||
: >intervals ( seq -- seq' )
|
: >intervals ( seq -- seq' )
|
||||||
[ 1+ ] assoc-map concat ;
|
[ 1 + ] assoc-map concat ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
@ -97,7 +98,7 @@ PRIVATE>
|
||||||
0 over ?nth zero? [ rest ] [ 0 prefix ] if ;
|
0 over ?nth zero? [ rest ] [ 0 prefix ] if ;
|
||||||
|
|
||||||
: interval-max ( interval-set1 interval-set2 -- n )
|
: interval-max ( interval-set1 interval-set2 -- n )
|
||||||
[ array>> [ 0 ] [ peek ] if-empty ] bi@ max ;
|
[ array>> [ 0 ] [ last ] if-empty ] bi@ max ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue