From 1de4896c248f6f95767c4d75df3bd7ffc3130c32 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Sun, 3 Feb 2008 03:49:19 -0600
Subject: [PATCH] Add partial-apply

---
 extra/partial-apply/partial-apply.factor | 26 ++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 extra/partial-apply/partial-apply.factor

diff --git a/extra/partial-apply/partial-apply.factor b/extra/partial-apply/partial-apply.factor
new file mode 100644
index 0000000000..0340e53025
--- /dev/null
+++ b/extra/partial-apply/partial-apply.factor
@@ -0,0 +1,26 @@
+
+USING: kernel sequences quotations math parser
+       shuffle combinators.cleave combinators.lib sequences.lib ;
+
+IN: partial-apply
+
+! Basic conceptual implementation. Todo: get it to compile.
+
+: apply-n ( obj quot i -- quot ) 1+ [ -nrot ] curry swap compose curry ;
+
+SYMBOL: _
+
+SYMBOL: ~
+
+: blank-positions ( quot -- seq )
+  [ length 2 - ] [ _ indices ] bi [ - ] map-with ;
+  
+: partial-apply ( pattern -- quot )
+  [ blank-positions length nrev ]
+  [ peek 1quotation ]
+  [ blank-positions ]
+  tri
+  [ apply-n ] each ;
+
+: $[ \ ] [ >quotation ] parse-literal \ partial-apply parsed ; parsing
+