SuperColliderをやる2

今日はさっさと酒を飲んでパッと寝たいんだけど連続して書かないと永久に書かなくなる気がしたので無理矢理書く二日目SuperCollider。 コードを読むのは面倒くさいのでちょっと数式をいじってみる。数値×数列がmapになるなら数列×数列も計算出来るんじゃねーのと思ったから。

[1,2,3]*[4,5,6]
//=>[ 4, 10, 18](出力)

ビンゴだったので長さを変えてみる。

[1,2,3]*[4,5,6,7]
//=>[ 4, 10, 18, 7 ]

アレーと思ったけどもう一個増やしてみたら解決。

[1,2,3]*[4,5,6,7,8]
//=>[ 4, 10, 18, 7, 16 ]

面倒なので数式にはしないけど長さの違う配列の場合短い方は勝手に補完されてループになるらしい。波形を扱うから?と思ってみたけどpythonもindexに負数使えるしそれと似たようなもんかも。 ちなみに次元を変えても予想通りの結果。

[1,2,3]*[4,5,6,7,[8,9]]
//=>[ 4, 10, 18, 7, [ 16, 18 ] ]

なにげにこの作りはかなり楽なような気がする。pythonと似たようなもんかも、と言ったけど明確に音声処理を意識してる感(マサカリ)。 ちなみにちなみにだけれど足し算も同じように動く。

["a","b","c"]+["d",["e","f"]]
//=>[ a d, b [ e, f ], c d ]

数値では芸がないので文字列にした。ちなみにSCは文字を表すクラスが文字列とシンボルの二種類があるみたいなLisp的な初心者殺し言語なんだけど、試しにシンボル(シングルクォート囲み)にさっきの演算を置き換えてみると

['a','b','c']+['d',['e','f']]
//=>[ a, b, c ]

とか意味不明なことを言われたりする。最初の被演算子しか残らないのかなと思ったけど

['a','b','c']+'d'
//=>d

これは前者の数列が出る。だったら

["d",["e","f"]]+["a","b","c"]

はどうなんよ?と思ったらコンパイルエラーだった。ちなみに

'd'+['a','b','c']
//=>d

こっちは普通に出る。なんとなく面白かったからやってみたけどStringはともかく(MIDI関連で使う可能性)シンボルっていつ自分で応用させる機会があるんだろうなと思った。全く音を鳴らさなかったけど元々数学と合わせて楽しみたい感じあったので満足。