- 2009/03/06 08:45
- SuperCollider
体系的に端からやってくのに飽きたので、ちょっと飛んで別のところ。
バスとかバッファとか、どうせ後で必要だから後でやらざるを得ないだろうし。
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
- Newer: sc – クラスつくれんのか
- Older: またスーパー高校生ですか。
Comments:2
- mynz 2009/03/06
http://lambda-the-ultimate.org/node/1431
ここのBlogでコメントでSupperColliderの作者(James McCartney)が認めているように、SCは文法的にはRubyそっくりな感じです。
RubyをまねたSC、RubyがまねたSmaltalk and Lispという系譜でしょうか。
- tai 2009/03/07
>mynzさん
おーーーーーーーーー!!
Rubyってこんな文法なんですか!
知らなかった、、、
てことはSuperCollider→Rubyは比較的簡単に・・・!?
棚ボタGET!!www> RubyをまねたSC、RubyがまねたSmaltalk and Lispという系譜でしょうか。
なるほど、それでなんとなくLispっぽさを感じる部分があるんですねー。
最近Schemeの勉強をしているせいもあって、Lispの影響を受けたことで有名なRubyにも非常に興味がわいています。
でもそもそもSchemeが、、、まだ全然、、、ww
なのでRubyはずっと後回しです:)Rubyに似てるってのは、sc勉強する上でやりやすくなるかも?
非常に有益な情報ありがとうございます。