>byte-array append ;
: >ber-application-string ( n str -- byte-array )
- >r HEX: 40 + set-tag r> >ber ;
+ [ HEX: 40 + set-tag ] dip >ber ;
GENERIC: >ber-contextspecific ( n obj -- byte-array )
M: string >ber-contextspecific ( n str -- byte-array )
- >r HEX: 80 + set-tag r> >ber ;
+ [ HEX: 80 + set-tag ] dip >ber ;
! =========================================================
! Array
dupd at [ nip ] when* ;
: replace-at ( assoc value key -- assoc )
- >r >r dup r> 1vector r> rot set-at ;
+ [ dupd 1vector ] dip rot set-at ;
: peek-at* ( assoc key -- obj ? )
- swap at* dup [ >r peek r> ] when ;
+ swap at* dup [ [ peek ] dip ] when ;
: peek-at ( assoc key -- obj )
peek-at* drop ;
: insert ( value variable -- ) namespace push-at ;
: generate-key ( assoc -- str )
- >r 32 random-bits >hex r>
+ [ 32 random-bits >hex ] dip
2dup key? [ nip generate-key ] [ drop ] if ;
: set-at-unique ( value assoc -- key )
! Generalized versions of core combinators
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-: quad ( x p q r s -- ) >r >r >r keep r> keep r> keep r> call ; inline
+: quad ( x p q r s -- ) [ keep ] 3dip [ keep ] 2dip [ keep ] dip call ; inline
: 4slip ( quot a b c d -- a b c d ) 4 nslip ; inline
>r pick >r with r> r> swapd with ;
: or? ( obj quot1 quot2 -- ? )
- >r keep r> rot [ 2nip ] [ call ] if* ; inline
+ [ keep ] dip rot [ 2nip ] [ call ] if* ; inline
: and? ( obj quot1 quot2 -- ? )
- >r keep r> rot [ call ] [ 2drop f ] if ; inline
+ [ keep ] dip rot [ call ] [ 2drop f ] if ; inline
MACRO: multikeep ( word out-indexes -- ... )
[
[ drop ] rot compose attempt-all ; inline
: do-while ( pred body tail -- )
- >r tuck 2slip r> while ; inline
+ [ tuck 2slip ] dip while ; inline
: generate ( generator predicate -- obj )
[ dup ] swap [ dup [ nip ] unless not ] 3compose
MACRO: predicates ( seq -- quot/f )
dup [ 1quotation [ drop ] prepend ] map
- >r [ [ dup ] prepend ] map r> zip [ drop f ] suffix
+ [ [ [ dup ] prepend ] map ] dip zip [ drop f ] suffix
[ cond ] curry ;
: %chance ( quot n -- ) 100 random > swap when ; inline