QcPenPrinter: no need to allocate QPrintDialog on heap
[supercollider.git] / HelpSource / Classes / PstepNfunc.schelp
blob3fc0cda1f3448f6ae453085d7bd3d88ddabf33f4
1 class:: PstepNfunc
2 summary:: combinatoric pattern
3 related:: Classes/PstepNadd
4 categories:: Streams-Patterns-Events>Patterns>Time
6 description::
8 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.
10 Examples::
12 code::
14 f = { arg vals;
15         vals.postln;
17 x = PstepNfunc(f, [
18                 Pseq([1, 2, 3]), Pseq([4, 5, 6]), Pseq([7, 8, 9])
19         ]).asStream;
20 50.do({ x.next });
24 f = { arg vals;
25         var r;
26         r = vals.copy.removeAt(0);
27         vals.do({ arg item;  r = item / r.squared * 10 });
28         r
30 x = PstepNfunc(f,
31         [
32                 Pseq([1, 2, 3], inf),
33                 Pseq([2, pi, 1]),
34                 Pseq([0.1, 3, 0.2, 3])
35         ]
36         ).asStream;
38 50.do({ x.next.postln });
41 // note that if the last pattern loops it will stick to that one:
43 f = { arg vals;
44         vals.postln;
46 x = PstepNfunc(f, [Pseq([1, 2, 3]), Pseq([10, 20, 30, 40]), Pseq([100, 200, 300], inf)]).asStream;
47 50.do({ x.next });
52 f = { arg vals;
53         vals.inject(1, { arg x, y; x * y })
55 x = PstepNfunc(f,
56         [
57                 Pseq([1, 2, 3], inf),
58                 Pseq([2, pi, 1]),
59                 Pseq([0.1, 3, 0.2, 3])
60         ]
61         ).asStream;
63 50.do({ x.next.postln });