]> gitweb.factorcode.org Git - factor.git/commitdiff
Move at-default from unicode.case to assocs, move 2cache from classes.algebra to...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 20 Jan 2009 21:27:14 +0000 (15:27 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 20 Jan 2009 21:27:14 +0000 (15:27 -0600)
basis/unicode/case/case.factor
core/assocs/assocs-tests.factor
core/assocs/assocs.factor
core/classes/algebra/algebra.factor
core/splitting/splitting.factor

index 555a39ac888876a8aa538510100251d11fdded09..7566138e11f34057fa4f808bbbe3217083c42338 100644 (file)
@@ -8,8 +8,6 @@ QUALIFIED: ascii
 IN: unicode.case
 
 <PRIVATE
-: at-default ( key assoc -- value/key ) [ at ] [ drop ] 2bi or ; inline
-
 : ch>lower ( ch -- lower ) simple-lower at-default ; inline
 : ch>upper ( ch -- upper ) simple-upper at-default ; inline
 : ch>title ( ch -- title ) simple-title at-default ; inline
index 969c7249a9205150c01fdacb1b82db9f273411ab..ac82da7b9be495ab478a9db72523c344ab7cda96 100644 (file)
@@ -118,3 +118,15 @@ unit-test
         { "nachos" "cheese" }
     } extract-keys
 ] unit-test
+
+[ f ] [
+    "a" H{ { "a" f } } at-default
+] unit-test
+
+[ "b" ] [
+    "b" H{ { "a" f } } at-default
+] unit-test
+
+[ "x" ] [
+    "a" H{ { "a" "x" } } at-default
+] unit-test
\ No newline at end of file
index 748300ef0f8d20e0020249fbcfe5116eecd64bbb..7f34c3b19da946108c50f06c87eb8fd398308557 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2007, 2008 Daniel Ehrenberg, Slava Pestov
+! Copyright (C) 2007, 2009 Daniel Ehrenberg, Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel sequences arrays math sequences.private vectors
 accessors ;
@@ -41,8 +41,7 @@ GENERIC: >alist ( assoc -- newassoc )
     over assoc-map-as ; inline
 
 : assoc-push-if ( key value quot accum -- )
-    [ 2keep rot ] dip swap
-    [ [ 2array ] dip push ] [ 3drop ] if ; inline
+    [ 2keep ] dip [ [ 2array ] dip push ] 3curry when ; inline
 
 : assoc-pusher ( quot -- quot' accum )
     V{ } clone [ [ assoc-push-if ] 2curry ] keep ; inline
@@ -62,9 +61,12 @@ GENERIC: >alist ( assoc -- newassoc )
 : at ( key assoc -- value/f )
     at* drop ; inline
 
+: at-default ( key assoc -- value/key )
+    2dup at* [ 2nip ] [ 2drop ] if ; inline
+
 M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
     over assoc-size swap new-assoc
-    swap [ swap pick set-at ] assoc-each ;
+    [ [ swapd set-at ] curry assoc-each ] keep ;
 
 : keys ( assoc -- keys )
     [ drop ] { } assoc>map ;
@@ -76,7 +78,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
     [ at* ] 2keep delete-at ;
 
 : rename-at ( newkey key assoc -- )
-    tuck delete-at* [ -rot set-at ] [ 3drop ] if ;
+    [ delete-at* ] keep [ swapd set-at ] curry [ 2drop ] if ;
 
 : assoc-empty? ( assoc -- ? )
     assoc-size zero? ;
@@ -132,14 +134,16 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
     substituter map ;
 
 : cache ( key assoc quot -- value )
-    2over at* [
-        [ 3drop ] dip
-    ] [
-        drop pick rot [ call dup ] 2dip set-at
-    ] if ; inline
+    [ [ at* ] 2keep ] dip
+    [ [ nip call dup ] [ drop ] 3bi set-at ] 3curry
+    [ drop ] prepose
+    unless ; inline
+
+: 2cache ( key1 key2 assoc quot -- value )
+    [ 2array ] 2dip [ first2 ] prepose cache ; inline
 
 : change-at ( key assoc quot -- )
-    [ [ at ] dip call ] 3keep drop set-at ; inline
+    [ [ at ] dip call ] [ drop ] 3bi set-at ; inline
 
 : at+ ( n key assoc -- ) [ 0 or + ] change-at ; inline
 
index 1b86ce0b0a939e44afd21b709222af71ade524a6..4625c665bf229bc79a56fdf1ce2950693c80002c 100644 (file)
@@ -17,9 +17,6 @@ TUPLE: anonymous-complement class ;
 \r
 C: <anonymous-complement> anonymous-complement\r
 \r
-: 2cache ( key1 key2 assoc quot -- value )\r
-    [ 2array ] 2dip [ first2 ] prepose cache ; inline\r
-\r
 GENERIC: valid-class? ( obj -- ? )\r
 \r
 M: class valid-class? drop t ;\r
index a2a302d995fad1b6f47b16b55584713afef4b60e..e31a25b687f981d581afb76cfba310556db64611 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2005, 2008 Slava Pestov.
+! Copyright (C) 2005, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel math make strings arrays vectors sequences
 sets math.order accessors ;
@@ -16,19 +16,23 @@ IN: splitting
 : ?tail-slice ( seq end -- newseq ? )
     2dup tail? [ length head-slice* t ] [ drop f ] if ;
 
+: (split1) ( seq subseq -- start end ? )
+    tuck swap start dup
+    [ swap [ drop ] [ length + ] 2bi t ]
+    [ 2drop f f f ]
+    if ;
+
 : split1 ( seq subseq -- before after )
-    dup pick start dup [
-        [ [ over ] dip head -rot length ] keep + tail
-    ] [
-        2drop f
-    ] if ;
+    [ drop ] [ (split1) ] 2bi
+    [ [ over ] dip [ head ] [ tail ] 2bi* ]
+    [ 2drop f ]
+    if ;
 
 : split1-slice ( seq subseq -- before-slice after-slice )
-    dup pick start dup [
-        [ [ over ] dip head-slice -rot length ] keep + tail-slice
-    ] [
-        2drop f
-    ] if ;
+    [ drop ] [ (split1) ] 2bi
+    [ [ over ] dip [ head-slice ] [ tail-slice ] 2bi* ]
+    [ 2drop f ]
+    if ;
 
 : split1-last ( seq subseq -- before after )
     [ <reversed> ] bi@ split1 [ reverse ] bi@