2017/04/27

SuperColliderの()

SuperColliderの()

SuperColliderの()はブロックのようにも使えるメソッドの呼び出しです。Messageとも関連がありますが、何と呼んでいいのかよくわかりません。lispのprognが感覚としては近いです。

まずはブロックとして使ってみます。SuperCollider IDEでは貼り付けた行にカーソルを合わせてCtrl+Returnで実行できます。

(a = 10; b = a * a; c = b * b; postln(c)) // 10000

メソッド名を指定すれば関数を呼び出せます。()は最後の式の評価値を返します。

postln(a = 10; b = a * a; c = b * b; c + c) // 20000

入れ子にしてみます。以下を範囲選択してCtrl+Returnで実行できます。

(postln(
  a = 10;
  c = (
    b = a * a;
    b * b
  );
  postln(b); // 100
  c + c
)); // 20000
postln(a) // 10

宣言した変数はグローバルになっていることがわかりました。

メソッド名は後ろにも書けます。

postln(100); // 100
100.postln;  // 100

postln(neg(1)); // -1
1.neg.postln    // -1

引数が2つ以上の場合は後ろに置けません。ただし先頭の引数は前に置くことができます。

squared(difsqr(4, 8));   // 2304
difsqr(4, 8).squared;    // 2304
4.difsqr(8).squared      // 2304
// (4, 8).difsqr.squared // エラー