PstepNfunc combinatoric pattern  


superclass: Pattern



combines an arbitrary number of patterns by evaluating a function (depth first traversal).

when a stream ends it is recreated from its pattern until the top stream ends.


see also: PstepNadd



*new(func, patternList);





//examples

(

f = { arg vals;

vals.postln;

};

x = PstepNfunc(f, [

Pseq([1, 2, 3]), Pseq([4, 5, 6]), Pseq([7, 8, 9])

]).asStream;

50.do({ x.next });

)


(

f = { arg vals;

var r;

r = vals.copy.removeAt(0);

vals.do({ arg item;  r = item / r.squared * 10 });

r

};

x = PstepNfunc(f, 

[

Pseq([1, 2, 3], inf), 

Pseq([2, pi, 1]), 

Pseq([0.1, 3, 0.2, 3])

]

).asStream;


50.do({ x.next.postln });

)


// note that if the last pattern loops it will stick to that one:

(

f = { arg vals;

vals.postln;

};

x = PstepNfunc(f, [Pseq([1, 2, 3]), Pseq([10, 20, 30, 40]), Pseq([100, 200, 300], inf)]).asStream;

50.do({ x.next });

)



(

f = { arg vals;

vals.inject(1, { arg x, y; x * y })

};

x = PstepNfunc(f, 

[

Pseq([1, 2, 3], inf), 

Pseq([2, pi, 1]), 

Pseq([0.1, 3, 0.2, 3])

]

).asStream;


50.do({ x.next.postln });

)