SuperCollider メモ : 数値リテラル
SuperCollider 数値リテラルについて紹介します。
一般的な数値リテラル
10 // Integer の 10 10.0 // Float の 10.0 10.0e-1 // 指数表記 0x10 // 16進数
普通に良くあるやつ。JavaScript 側から見たときに注意する点は Integer
と Float
があることくらい。あと .5
とか 5.
みたいな省略はエラーになる。Float
は内部的には倍精度です。e
は大文字小文字どっちでも良いけど、x
は大文字だとエラーになる。
負の数値リテラル
JavaScript なんかでは -10
とあると 単項演算子 - と 数値リテラル 10 と解釈されるけど、SuperColldier は単項演算子がないため、負の数値はそれがそのまま数値リテラルとなる。単項演算子がないために注意すべき点は - 10
みたいに間にスペースを挟んだりできないし、1--0
みたいにくっつけすぎてもいけない(二項演算子 -- と解釈される)。+10
とは書けない。
-10 // Integer の -10
あと単項演算子がないということで -a
というコードは書けなくて a.neg
と書く必要がある。この辺はダメな感じがする。
擬似変数
pi
と inf
と -inf
がある。
pi
というのは便利で他の数値リテラルの付与することができる。
10pi // 10 * pi
N進数リテラル
基数 r 数値記号
という表記になる。使える記号は [0-9a-zA-Z]
で大文字小文字の区別はない。あと小数も使える。25進数以下だと前述の pi
も使える。26進数以上だと pi
が数値記号とみなされる。まあN進数表記に pi
を積算する用途はないと思うけどダメ感ある。
2r1101 // 2進数 で 13 256r100 // 256進数 で 65536 16r0.11 // 16進数 で 1/16 + 1/(16*16) 25r1pi // 3.1415926535898 26r1pi // 1344
臨時記号付き数値リテラル
数値の後ろに b
か s
を並べる書き方と、b
か s
を一つ書いてあとにさらに数値を続ける書き方2種類の臨時記号付き数値リテラルというのがある。b
はフラットで s
はシャープ。
b
か s
を並べる例は以下のとおり、b
の数だけ 0.1 下がり、s
の数だけ 0.1 上がる。シンタックス的にはいくつでも付けられるけど一応4つまでっぽい。
2bb // 2 - 0.2 = 1.8 2b // 2 - 0.1 = 1.9 2s // 2 + 0.1 = 2.1 2ss // 2 + 0.2 = 2.2
b
か s
に続けて数値を書く例は以下のとおり。より細かく指定ができる。
2b250 // 2 - 0.001 * 250 = 1.75 2b100 // 2 - 0.001 * 100 = 1.9 2s100 // 2 + 0.001 * 100 = 2.1 2s250 // 2 + 0.001 * 250 = 2.25
スケール(調性)うんぬんの時に使うらしい。SuperCollider ならではという感じだ。
NaN
NaN
は 識別しとして存在しない。 0/0
みたいな感じで作ることはできる。残念なことに NaN
同士は ==
ではないけど ===
である。ちゃんと確認していないけど ==
が値の比較。===
はオブジェクトのポインタの比較(数値型はインスタンスを共有する)なんだと思う。
(0/0).isNaN // true (0/0) == (0/0) // false (0/0) === (0/0) // true !!!!!
SCScript
SuperCollider のブラウザ移植版として今作っている SCScript では臨時記号付き数値リテラル以外はサポートしている。Rubyの数値リテラルにあるアンダーバーが良さそうだったので導入して、ついでに単項演算子 - もつけておいたので - 10
とか -a
とか書くこともできるようにした。ゆるい拡張はOKという方針でやっている。
// SCScript 1_000 // Integer の 1000 1_000.000_000 // Float の 1000.000000 - 10 // 10.neg -a // a.neg