Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Random

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

Flix は、擬似乱数(Pseudorandom number)を生成するためのライブラリエフェクトとして Random を提供しています。Random エフェクトはデフォルトハンドラを持っているため、main の中で明示的に runWithIO を呼び出す必要はありません。主要なモジュールは Math.Random です。

Random エフェクト

Random エフェクトには 2 つの操作があります:

pub eff Random {
    /// [0.0, 1.0] の範囲の擬似乱数(64 ビット浮動小数点数)を返します。
    def randomFloat64(): Float64

    /// 擬似乱数(64 ビット整数)を返します。
    def randomInt64(): Int64
}

ランダムな値の生成

Random の最も簡単な使い方は、値を生成してそれに応じた処理を行うことです:

use Math.Random

def main(): Unit \ { Random, IO } =
    let flip = Random.randomFloat64() > 0.5;
    if (flip)
        println("heads")
    else
        println("tails")

Random はデフォルトハンドラを持っているため、このエフェクトは新しいランダムシードを使って自動的に処理されます。

シード付きの乱数

runWithSeed ハンドラは固定のシード(Seed)を使用するため、実行するたびに同じ乱数列が生成されます。これは、再現可能なテストやベンチマークに役立ちます:

use Math.Random

def main(): Unit \ IO =
    run {
        let a = Random.randomFloat64();
        let b = Random.randomFloat64();
        println("a = ${a}, b = ${b}")
    } with Random.runWithSeed(42i64)

シード付きの乱数生成器は完全に決定的であるため、runWithSeedIO を導入することなく Random エフェクトを除去します。