blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

SuperColliderでリスト内包表記

いきさつ

個人的にリスト内包表記が大好きです。 なんと言っても、ワンライナーでの情報量の多さと見やすさですかね。 SuperColliderでも表記できるようなので、やってみました。 どうやらSuperColliderの場合はジェネレータからリストを作るような構造になっているみたいです。

ジェネレータ

2乗が50を超えない偶数を列挙してみます。

(
  z = {: x, x <- (1..), :while x**2 < 500, x.even, ::x.postln };
  z.next;
  z.next;
  z.next;
  z.next;
)

上記のコードを実行すると以下のように出力されると思います。

2
4
6
nil

{: ... } の部分がジェネレータ(実際のクラスはRoutine)を表しています。 :whileと::<副作用的な式>はオプションで使用することができます。

リスト

上記のリスト版です。

(
  z = all {: x, x <- (1..), :while x**2 < 500, x.even, ::x.postln };
  z.postln;
)

上記のコードを実行すると以下のように出力されると思います。

[2, 4, 6]

ジェネレータの前にallという文字列を置くことによってジェネレータから生成される数列をまとめてくれるのですね。

reference