From a3c6df99bcde3e78366412cdf8a4fbf31c24a3ba Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg <ehrenbed@carleton.edu> Date: Thu, 10 Jan 2008 21:49:42 -0500 Subject: [PATCH] Adding extra/assocs --- extra/assocs/lib/authors.txt | 1 + extra/assocs/lib/lib.factor | 24 ++++++++++++++++++++++++ extra/assocs/lib/tags.txt | 1 + 3 files changed, 26 insertions(+) create mode 100644 extra/assocs/lib/authors.txt create mode 100644 extra/assocs/lib/lib.factor create mode 100644 extra/assocs/lib/tags.txt diff --git a/extra/assocs/lib/authors.txt b/extra/assocs/lib/authors.txt new file mode 100644 index 0000000000..6cfd5da273 --- /dev/null +++ b/extra/assocs/lib/authors.txt @@ -0,0 +1 @@ +Eduardo Cavazos diff --git a/extra/assocs/lib/lib.factor b/extra/assocs/lib/lib.factor new file mode 100644 index 0000000000..b71982f1f2 --- /dev/null +++ b/extra/assocs/lib/lib.factor @@ -0,0 +1,24 @@ +USING: assocs kernel vectors sequences ; +IN: assocs.lib + +: insert-at ( value key assoc -- ) + [ ?push ] change-at ; + +: >set ( seq -- hash ) + [ dup ] H{ } map>assoc ; + +: ref-hash ( table key -- value ) swap at ; + +! set-hash with alternative stack effects + +: put-hash* ( table key value -- ) swap rot set-at ; + +: put-hash ( table key value -- table ) swap pick set-at ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: set-hash-stack ( value key seq -- ) + dupd [ key? ] curry* find-last nip set-at ; + +: at-default ( key assoc -- value/key ) + dupd at [ nip ] when* ; diff --git a/extra/assocs/lib/tags.txt b/extra/assocs/lib/tags.txt new file mode 100644 index 0000000000..42d711b32b --- /dev/null +++ b/extra/assocs/lib/tags.txt @@ -0,0 +1 @@ +collections