IN: math.finance
-HELP: enumerate
-{ $values { "seq" "a sequence" } { "newseq" "a sequence" } }
-{ $description "Returns a new sequence where each element is an array of { value, index }" } ;
-
HELP: sma
{ $values { "seq" "a sequence" } { "n" "number of periods" } { "newseq" "a sequence" } }
{ $description "Returns the Simple Moving Average with the specified periodicity." } ;
IN: math.finance
-: enumerate ( seq -- newseq )
- <enum> >alist ;
-
<PRIVATE
: weighted ( x y a -- z )
: a ( n -- a )
1 + 2 swap / ;
-: first-rest ( seq -- first rest )
- [ first ] keep 1 tail-slice ;
-
PRIVATE>
: ema ( seq n -- newseq )
- a swap first-rest swap [ [ dup ] 2dip swap rot weighted ] accumulate 2nip ;
+ a swap unclip [ [ dup ] 2dip swap rot weighted ] accumulate 2nip ;
: sma ( seq n -- newseq )
clump [ mean ] map ;
{ $values { "seq" sequence } { "seq'" sequence } }\r
{ $description "Shuffle the elements in the sequence randomly, returning the new sequence." } ;\r
\r
+HELP: enumerate\r
+{ $values { "seq" sequence } { "seq'" sequence } }\r
+{ $description "Returns a new sequence where each element is an array of { index, value }" } ;\r
+\r
[ 1 2 { 3 4 } [ + + drop ] 2 each-withn ] must-infer
{ 13 } [ 1 2 { 3 4 } [ + + ] 2 each-withn + ] unit-test
[ { 910 911 912 } ] [ 10 900 3 [ + + ] map-with2 ] unit-test
+
+[ { { 0 1 } { 1 2 } { 2 3 } } ] [ { 1 2 3 } enumerate ] unit-test
+
: randomize ( seq -- seq' )
dup length 1 (a,b] [ dup random pick exchange ] each ;
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: enumerate ( seq -- seq' )
+ <enum> >alist ;
+
+