sc – 駄メモ

体系的に端からやってくのに飽きたので、ちょっと飛んで別のところ。
バスとかバッファとか、どうせ後で必要だから後でやらざるを得ないだろうし。


Control Structures
そう言えば制御構文の事を一切知らん。

ifはまぁ普通、、、か?
elseとかは書かなくて良いっぽい。
trueFunc, falseFuncと、関数を書く、のね。
オブジェクト指向言語なんだけど、ちょっと関数型っぽいような気も。
lispの影響受けてる?

for (3, 7, { arg i; i.postln }); // prints values 3 through 7

forは最後の関数に引数としてiを渡してる。
こういうループはなかなか見んなぁ。
変な言語だsc・・・www

forよりもよく見るのはdo。
Do is used to iterate over a collection.とのことなので、まぁfor-inとかforeachとか、そういう感じですか。

[ 1, 2, "abc", (3@4) ].do({ arg item, i; [i, item].postln; });
> [ 0, 1 ]
> [ 1, 2 ]
> [ 2, abc ]
> [ 3, Point( 3, 4 ) ]

>の行は結果。
第1引数がイテレートされた要素、第2引数がイテレーションカウンタ。
んー、、、これ見る限りforよりも強力?

Routine({ var i=10; while { i > 0 } { i.yield; i = i - 5.0.rand } }).do({ arg item; item.postln });

Routineはジェネレータ。
rand入っているので結果は毎回まちまちですが、一応こんな感じになる。

10
9.5151138305664
6.1931854486465
3.8328790664673
1.0792535543442

と思ったらこちらにいい感じの解説が。
そうか、スレッディングの為のものなのね。
シーケンス作るって観点から言えば確かにそうだよな。

もしかしてyieldって普通にFunctionの中で動く?と思ったら無理だった。
ってことはやはりRoutineにはジェネレータとしての側面もあるっぽい。
なるほどなー。

余談ですが、loopに関してドキュメント見当たらないので、文脈から無限ループかな?と思って

loop {10.postln;}

ってやったら固まった(^^)

loopってのはなんぞ?と思ってそれだけで実行したらnot definedになったから、ありゃ、と思って
また分かっていながら↑のを実行したら落ちたwww

てことはFunctionクラスの何かだな、と思って調べたらあった。

loop
Repeat this function. Useful with Task and Clocks.

t = Task({ { "I'm loopy".postln; 1.wait;}.loop });
t.start;
t.stop;

やっぱり単独で使うと無限ループなわけかwww
簡略化された構文だったりしたのかな、 loop {…} ていう形式は。

scには結構大量の構文省略(?)があるらしいので、↓は一応見ておいた方が良いかも。
Syntax Shortcuts

てかFunctionクラスのリファレンスページにあるこの表記面白い。

// example
(
var a, b, c;
a = { [100, 200, 300].choose }; // a Function
b = { 10.rand + 1 }; // another Function
c = a + b; // c is a Function.
c.value.postln; // evaluate c and print the result
)

何てことはないように見えるけど、関数と関数を足してる。
普通に結果が足されてるような出力だけど、中ではどう処理されてんだろ。

楽しい、、、楽しいよsc!!

あとチュートリアル系はこの辺をちょっとやったら、実際に何か鳴らしてみるかなー。

Scheduling Events
Sequencing with Routines and Tasks
Sequencing with Patterns

というか思ったより言語仕様デカかったな、sc、、、
てっきりもっとへんぴな言語かと、、、って失礼ww

「sc – 駄メモ」への2件のフィードバック

  1. http://lambda-the-ultimate.org/node/1431

    ここのBlogでコメントでSupperColliderの作者(James McCartney)が認めているように、SCは文法的にはRubyそっくりな感じです。

    RubyをまねたSC、RubyがまねたSmaltalk and Lispという系譜でしょうか。

  2. >mynzさん

    おーーーーーーーーー!!
    Rubyってこんな文法なんですか!
    知らなかった、、、
    てことはSuperCollider→Rubyは比較的簡単に・・・!?
    棚ボタGET!!www

    > RubyをまねたSC、RubyがまねたSmaltalk and Lispという系譜でしょうか。

    なるほど、それでなんとなくLispっぽさを感じる部分があるんですねー。

    最近Schemeの勉強をしているせいもあって、Lispの影響を受けたことで有名なRubyにも非常に興味がわいています。
    でもそもそもSchemeが、、、まだ全然、、、ww
    なのでRubyはずっと後回しです:)

    Rubyに似てるってのは、sc勉強する上でやりやすくなるかも?
    非常に有益な情報ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。