特徴
使用
ワンスモードのボックスは、あるユーザー評価内で1回目の内部評価は計算され、以降はロックされる。次にユーザー評価されればまた1回目は計算され、以降はロック。
複数の内部評価
この評価モードは、1回1回違う値を出すような関数が出した値を他でも使いたいときに使うとよい。
手順
ワンスモードにするにはボックスを選択してbキーを押し、左上を1回クリックする。
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
アイコンがつく。
例

- ワンスモードでは1コ目の要素はランダム、2コ目の要素は1コ目と同じ。つまりランダムなワンペアが作られる。
- ユーザーがlistに「値をくれ」と言う(ユーザー評価)。
- listは入力された要素をリスト化する関数。そのための材料を集める。listは第1入力を確認、om-randomに「値くれ」と言う。
- om-randomは1回目なので普通に処理される。材料集め。第1入力を確認、5をもらう。第2入力を確認、8をもらう。
- om-randomは材料がそろったので計算する。5・6・7・8のうちどれかをランダムにlistに返す。
- listは第2入力を確認、om-randomに「値くれ」と言う。
- om-randomは2回目なので計算しない。さっきの値を思い出してlistに返す。
- listは材料がそろったので計算する。もらった2つをくっつけてユーザーに返す。
ちょっと込み入った例

これはドレミソラという5音からランダムに20コ選んで、同音連打は削除するという例。
同音連打の削除はここでは、20コの数列の差分数列を取る・差分が0ということは同じ音が連続しているので差分数列のうち0を削除する・元の数列の最初の要素に再度足し合わせるという方法を取っている。
具体的には(6200 6200 6700 6400 6400 6000)(レレソミミド)という数列が出てきたら、差分は(0 500 -300 0 -400)。このうち0を削除して(500 -300 -400)。これを元の数列の最初の要素6200(レ)に足し合わせて(6200 6700 6400 6000)(レソミド)にする。
ここでrepeat-nがワンスモードになっているが、これが通常モードだった場合、first関数に呼び出されたときとx->dx関数側に呼び出されたときで違う値を返すので、おかしなことになる。
例えばfirst関数に(6400 6200 6700 6400 6400 6000)(ミレソミミド)が渡され、x->dx関数側に(6200 6400 6000 6000 6700 6400)(レミドドソミ)が渡されると、first関数からの6400と差分計算側からの(200 -400 700 -300)で(6400 6600 6200 6900 6600)(ミ,ファ#,レ,ラ,ファ#)とズレたりする。
添付ファイル