]> gitweb.factorcode.org Git - factor.git/blob - extra/rewrite-closures/rewrite-closures.factor
Initial import
[factor.git] / extra / rewrite-closures / rewrite-closures.factor
1
2 USING: kernel parser math quotations namespaces sequences namespaces.lib 
3        inference.transforms ;
4
5 IN: rewrite-closures
6
7 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8
9 ! : set-parameters ( seq -- ) reverse [ set ] each ;
10
11 : [set-parameters] ( seq -- quot ) [ [ set ] curry ] map concat ;
12
13 : set-parameters ( seq -- ) [set-parameters] call ;
14
15 \ set-parameters [ [set-parameters] ] 1 define-transform
16
17 : parametric-quot ( parameters quot -- quot )
18 [ [ swap ] set-parameters [ ] call ] make* ;
19
20 : scoped-quot ( quot -- quot ) [ with-scope ] curry ;
21
22 : closed-quot ( quot -- quot )
23 [ namestack >r [ namestack ] set-namestack [ ] call r> set-namestack ] make* ;
24
25 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26
27 : lambda ( parameters quot -- ) parametric-quot scoped-quot closed-quot ;
28
29 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
30
31 : C[ \ ] [ >quotation ] parse-literal \ closed-quot parsed ; parsing