Fdef lazy function proxy

superclass: Maybe

placeholder for functions to calculate with.

See also: Maybe

Fdef(name, func)

Fdef(name)

if no instance exists with this name, create a new one, otherwise return the existing one.

If func is given, replace the old func with the new one.

// example

Fdef(\x, { 8 + 9 });

Fdef(\y, Fdef(\x) - 3);

Fdef(\y).value;

Fdef(\x, 3);

Fdef(\y).value;

Fdef(\x, { |x=0| x });

Fdef(\x).value(8);

Fdef(\y).value(8);

z = Fdef(\x) * Fdef(\y) + { 1.0.rand };

z.value;

z.value(400);

// sound example

(

s.boot;

SynthDef("gpdef",

{ arg out=0, freq=440, dur=0.05, amp=0.1;

var env;

env = EnvGen.kr(Env.perc(0.01, dur), doneAction:2) * amp;

Out.ar(out, SinOsc.ar(freq, 0, env))

}).store;

)

// fork a thread that plays some sounds

(

Fdef(\freq, 440);

Fdef(\dur, 0.2);

fork {

loop {

s.sendMsg("/s_new", "gpdef", -1, 1,1, \freq, Fdef(\freq).value);

Fdef(\dur).value.wait;

}

};

)

// some modifications

Fdef(\freq, Fdef(\midinote, 60).midicps);

Fdef(\midinote, { [67, 64, 65].choose });

Fdef(\midinote, { [67, 64, 65].choose } + Fdef(\offset));

Fdef(\offset, { 4.rand });

Fdef(\dur, 0.23);