Οι ρουτίνες είναι συναρτήσεις - σχέσεις οι οποίες συνεχίζουν απο το τελευταίο στάδιο που σταμάτησαν. Παράδειγμα:
a = routine({ 1.yield; 2.yield; })
Στην παραπάνω συνάρτηση όταν θα την καλέσουμε πρώτη φορά :
a.next.postln;
θα πάρουμε το αποτέλσμα 1. Όταν θα την καλέσουμε
δεύτερη φορά a.next.postln;
θα πάρουμε το αποτέλσμα 2. όταν θα την
καλέσουμε 3η, 4η, 5η … θα πέρνουμε το αποτέλσμα nil
. όσο αφορά τα
μηνύματα στα οποία ακούει το πρότυπο routine ήδη είδαμε το next
, και
επίσης πολύ σημαντικό είναι idle
, στο οποίο η ρουτίνα παραμένει για
όσες φορές ορίζει η παράμετρος του μηνύματος.
στη συνέχεια ακολουθεί ένα κομμάτι ωραίου συμπτιγμένου κώδικα στο
supercollider.
a = routine { (0..).do { |i| i.yield; }; };
patterns define behavior; streams execute it. in computer science terms, patterns are stateless; their definition does not change over time. there is no preset limit to the number of levels of embedding.
p = pseries(0, 1, 10); p.next; // always returns the pseries, not actual numbers q = p.asstream; q.next; // calling this repeatedly gets the desired increasing integers