Home > SuperCollider > sc – 駄メモ

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

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勉強する上でやりやすくなるかも?
非常に有益な情報ありがとうございます。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.taikomatsu.com/2009/03/06/sc-%e9%a7%84%e3%83%a1%e3%83%a2/trackback/
Listed below are links to weblogs that reference
sc – 駄メモ from memlog

Home > SuperCollider > sc – 駄メモ

Return to page top