非公式チュートリアル03 randomにまつわる各種のファンクション
ここではrandomににまつわる各種のファンクションを紹介する。

まず左上から見て行こう。[[om-random]]は、2つのインプットに与えられた数値の間の整数の乱数を返すファンクションである。
例えばこの画像の例では、0から9までのランダムな整数がevaluateするたびに返される。
例えばこの画像の例では、0から9までのランダムな整数がevaluateするたびに返される。
[[nth-random]]は、与えられたリストの中の一つの値をランダムに返す乱数オブジェクトである。
この画像の例では、(0 1 2 3 4 5 6 7 8 9)というリストが与えられているので、この中からランダムな値を返す。
この画像の例では、(0 1 2 3 4 5 6 7 8 9)というリストが与えられているので、この中からランダムな値を返す。
これに対して、[[nth]]'"はリストの中のn番目の特定の値を返す。何番目かを指定するには左のインプットに数値を入力する。LISPは0からものを数える''ので、左から3番目の値を指定したかったら2を指定する。
[[permut-random]]は、リストをランダムに並び替える乱数オブジェクトである。カードのシャッフルをイメージすると分かりやすい。
関連するオブジェクトとして、permutationsは全ての配列の可能性を返す。
これはつまり、多くの値を与えるほど膨大な計算量が必要となるので注意しよう。
もし膨大な計算でCPUがブロックしてしまったら、慌てずにLISPウィンドウを表示する。一覧メニューの中のLisp > Abortを選択すれば、計算は止まる。
これはつまり、多くの値を与えるほど膨大な計算量が必要となるので注意しよう。
もし膨大な計算でCPUがブロックしてしまったら、慌てずにLISPウィンドウを表示する。一覧メニューの中のLisp > Abortを選択すれば、計算は止まる。
画像左下の部分を見てみよう。om-randomをrepeat-nに接続した例である。repeat-nをevaluateすると、om-randomも5回evaluateされることになる。この5回が5回とも新たに値を返すこととなる。(同じ結果が複数回続くことも有り得る。)
もしom-randomを1回のみevaluateし、あとはその値を保持し続けたい場合は、ワンスモードというものを使う。
まずはom-randomをbキーでブロックする。そして『×』マークを1回クリックすると、『1』マークに変化する。これがワンスモードである。
この状態だと、evaluateが始まってから全ての結果が出力し終わるまでに、ワンスモードのオブジェクトは一度evaluateされるとあとはその値を保持し続け、その後は値が変わらない。
ワンスモードのom-randomを繋いだrepeat-nをevaluateすると、5回evaluateしてもその結果は常に同じ数値が返される。LISPウィンドウを確認すると、例えば (3 3 3 3 3) などと固定されているのが分かるだろう。
nth-randomについても同じように扱える。実際の例で見てみよう。(画像右下)
chordを作成し、orderモードにしてド、レ、ミ、ファ、ソ、ラ、シをこの順番で入力する。クラスはブロックしておく。これは(6000, 6200, 6400, 6500, 6700, 6900, 7100)が入力されていることになる。
nth-randomを用意し、repeat-nで5回繰り返す。その下にchordを用意すると、evaluateするごとに、上記の音の中から5つの音がランダムで選ばれて和音となる。(同じ音が複数回重なる場合もある。)
これに対してnth-randomをワンスモードにすると、repeat-nの繰り返した結果は常に同じ値が返ってくる。つまり記の音の中から1つの音(1つの価)が選ばれた後、常に同じ価が繰り返される。
permut-randomはリストを並べ替える。これはつまり、同じ価は1度しか選ばれない。permut-randomの下にchordを作り、evaluateしてみよう。このままだと同じ和音が表示されるだけだが、chordの中身を表示し、orderモードで見てみると、音の順番が並び替えられていることが分かる。
より手の込んだ乱数を扱いたい場合は、OMAleaライブラリというものがあるので、そちらも参照されたい。
(この非公式チュートリアルでは、外部ライブラリについては後日扱うものとする)
(この非公式チュートリアルでは、外部ライブラリについては後日扱うものとする)