gpt4 book ai didi

haskell - 如何在 Haskell 中使用 IO Double 作为常规 Double

转载 作者:行者123 更新时间:2023-12-04 23:36:58 24 4
gpt4 key购买 nike

我必须遵循代码

isInCircle::Double->Double->Bool
isInCircle p1 p2 = sqrt((p1*p1)+(p2*p2)) <= 1

当我打电话时
isInCircle (random :: Double) (random :: Double)

我收到这个错误
* Couldn't match expected type `Double' with actual type `g0 -> (a0, g0)'

如果我更改 isInCircle 的参数函数到 IO Double我收到 sqrt 的错误和补充...

你能帮助我吗?我的代码:
import System.Random 
main :: IO ()
main = do
if isInCircle (random :: Double) (random :: Double)
then print "True"
else print "False"

isInCircle::Double->Double->Bool
isInCircle p1 p2 = sqrt((p1*p1)+(p2*p2)) <= 1

最佳答案

在 GHCi 提示符下检查它,

> :i Random
class Random a where
randomR :: RandomGen g => (a, a) -> g -> (a, g)
random :: RandomGen g => g -> (a, g)
randomRs :: RandomGen g => (a, a) -> g -> [a]
randoms :: RandomGen g => g -> [a]
randomRIO :: (a, a) -> IO a
randomIO :: IO a
-- Defined in `System.Random'
instance Random Integer -- Defined in `System.Random'
instance Random Int -- Defined in `System.Random'
instance Random Float -- Defined in `System.Random'
instance Random Double -- Defined in `System.Random'
instance Random Char -- Defined in `System.Random'
instance Random Bool -- Defined in `System.Random'

我们看到,而不是 random , 对于 Double , randomIO :: IO Double看起来更有希望。如果我们能以某种方式到达 Double就好了“里面” IO Double “值(value)”的类型。我们能做到吗?

我们可以。这就是“绑定(bind)”的用途。在 do符号它是用 <- 完成的:
import System.Random 
main :: IO ()
main = do
-- if isInCircle (random :: Double) (random :: Double)
x <- (randomIO :: IO Double) -- thus, x :: Double
y <- (randomIO :: IO Double) -- thus, y :: Double
if isInCircle x y
then print "True" -- print "True" :: IO ()
else print "False" -- (if ... ...) :: IO ()

纯函数 isInCircle本身没有改变,也不需要改变。它仍然是对两个纯值进行操作的同一个纯函数。但是我们将它嵌入到组合 IO 中计算配方,由较小的 IO 构建计算配方(包括“内置” randomIO 配方),这样当产生的组合(组合?)计算 – 由名为 main 的值引用/描述时– 执行,它将使用纯函数 inInCircle与通过两个 randomIO 获得的两个值s。

那是 haskell 。内部纯粹,外部 I/O(如果不是——根据定义——通过 I/O,它怎么能与我们通信)。

关于haskell - 如何在 Haskell 中使用 IO Double 作为常规 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51229993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com