我需要在 Agda 中生成一个简单的随机数。
我尝试使用谷歌搜索短语,例如“ random number agda”,但找不到任何有效代码。
在 Haskell 中,代码为
import System.Random
main :: IO ()
main = do
-- num :: Float
num <- randomIO :: IO Float
-- This "extracts" the float from IO Float and binds it to the name num
print $ num
输出应为
0.7665119
或
0.43071353
如果可能,哪种Agda代码会达到相同的结果?
工作代码将不胜感激!
答案 0 :(得分:4)
最简单的方法可能是假设存在这种原语,然后向Agda解释如何使用COMPILE
编译指示来编译它。
open import Agda.Builtin.Float
import IO.Primitive as Prim
open import IO
random : IO Float
random = lift primRandom where
postulate primRandom : Prim.IO Float
{-# FOREIGN GHC import qualified System.Random as Random #-}
{-# COMPILE GHC primRandom = Random.randomIO #-}
open import Codata.Musical.Notation
open import Function
main : Prim.IO _
main = run $
♯ random >>= λ f → ♯ putStrLn (primShowFloat f)
我包含了一个main
,以便您可以编译该文件(使用agda -c FILENAME
)并运行它以查看您确实得到了随机浮点数。