{ H{ { 1 4 } } } [ H{ { 1 2 } } 1 over [ sq ] ?change-at ] unit-test
{ H{ { 1 2 } } } [ H{ { 1 2 } } 2 over [ sq ] ?change-at ] unit-test
{ H{ { 1 3 } } } [ H{ { 1 2 } } 3 1 pick [ drop dup ] ?change-at drop ] unit-test
+
+{ H{ { 1 100 } } } [
+ H{ } clone 1 100 set-of
+] unit-test
+
+{ H{ { 1 V{ 100 200 } } } } [
+ H{ } clone 1 100 push-of 1 200 push-of
+] unit-test
: maybe-set-at ( value key assoc -- changed? )
3dup at* [ = [ 3drop f ] [ set-at t ] if ] [ 2drop set-at t ] if ;
+: set-of ( assoc key value -- assoc )
+ swap pick set-at ; inline
+
<PRIVATE
: assoc-operator ( assoc quot -- alist quot' )
: push-at ( value key assoc -- )
[ ?push ] change-at ;
+: push-of ( assoc key value -- assoc )
+ swap pick push-at ; inline
+
: zip-as ( keys values exemplar -- assoc )
dup sequence? [
[ 2array ] swap 2map-as