Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何将随机数附加到列表中_Haskell - Fatal编程技术网

Haskell 如何将随机数附加到列表中

Haskell 如何将随机数附加到列表中,haskell,Haskell,我编写了一个函数来生成随机数: drawFloat :: Float -> Float -> IO Float drawFloat x y = getStdRandom (randomR (x,y)) 现在我有一个列表[1,2,3] 如何将随机数附加到此列表中 我尝试了[1,2,3]++(drawFloat 2 10)它不起作用 错误消息: Couldn't match expected type ‘[a]’ with actual type ‘IO a0’ Rel

我编写了一个函数来生成随机数:

drawFloat :: Float -> Float -> IO Float
drawFloat x y = getStdRandom (randomR (x,y))
现在我有一个列表
[1,2,3]

如何将随机数附加到此列表中

我尝试了
[1,2,3]++(drawFloat 2 10)
它不起作用

错误消息:

    Couldn't match expected type ‘[a]’ with actual type ‘IO a0’
    Relevant bindings include it :: [a] (bound at <interactive>:72:1)
    In the second argument of ‘(++)’, namely ‘(drawFloat 2 10)’
    In the expression: [1, 2, 3] ++ (drawFloat 2 10)
无法将预期类型“[a]”与实际类型“IO a0”匹配
相关绑定包括::[a](绑定时间:72:1)
在“(++)”的第二个参数中,即“(drawFloat 2 10)”中
在表达式中:[1,2,3]++(drawFloat 2 10)

我还尝试了
[1,2,3]++[(drawFloat 2 10)]
。仍然不起作用。

因此,
drawFloat
的类型是
Float->Float->IO Float
。我们只能附加一个
[Float]
。试一试

 appendRand :: [Float] -> IO [Float]
 appendRand lis = (lis ++) . return <$> drawFloat 2 10
appendRand::[Float]->IO[Float]
附录lis=(lis++)。返回浮动2 10

这里我们提升函数
(list++)。return::Float->[Float]
到一个
IO Float->IO[Float]
这正是我们想要的。(这里,
return
操作的是
[]
monad,而不是
IO

因此,
drawFloat
的类型是
Float->Float->IO Float
。我们只能附加一个
[Float]
。试一试

 appendRand :: [Float] -> IO [Float]
 appendRand lis = (lis ++) . return <$> drawFloat 2 10
appendRand::[Float]->IO[Float]
附录lis=(lis++)。返回浮动2 10

这里我们提升函数
(list++)。return::Float->[Float]
到一个
IO Float->IO[Float]
这正是我们想要的。(这里,
return
操作的是
[]
单子,而不是
IO

因为
drawFloat
返回一个单子类型,所以您必须深入到同一个单子中才能附加:

import System.Random

drawFloat :: Float -> Float -> IO Float
drawFloat x y = getStdRandom (randomR (x,y))

appendRandom :: [Float] -> IO [Float]
appendRandom as = do
  val <- drawFloat 2 10
  return $ as ++ [val]

main = appendRandom [1, 2, 3] >>= print
导入系统。随机
drawFloat::Float->Float->IO Float
drawFloat x y=getStdRandom(randomR(x,y))
appendRandom::[Float]->IO[Float]
appendas=do
val>=打印

因为
drawFloat
返回一个单子类型,所以您必须深入到同一个单子中才能附加:

import System.Random

drawFloat :: Float -> Float -> IO Float
drawFloat x y = getStdRandom (randomR (x,y))

appendRandom :: [Float] -> IO [Float]
appendRandom as = do
  val <- drawFloat 2 10
  return $ as ++ [val]

main = appendRandom [1, 2, 3] >>= print
导入系统。随机
drawFloat::Float->Float->IO Float
drawFloat x y=getStdRandom(randomR(x,y))
appendRandom::[Float]->IO[Float]
appendas=do
val>=打印

drawFloat 210>=\x>返回([1,2,3]+[x])
(\x->[1,2,3]+[x])drawFloat 210
drawFloat 210>=\x>返回([1,2,3]+[x])
(\x->[1,2,3]+[x])drawFloat 210
。如果我想在正常列表中添加一个随机数列表,该怎么办。我该怎么做?例如:一个普通的列表
[]
附加一个随机列表
[1,2,3]
(这些数字是由函数drawFloat生成的)?@CSnerd如果你想附加一个随机数字列表,你可以创建一个生成随机列表的函数,比如
randList=mapM(const$rawFloat 2 10)[1..n]
然后再附加这个函数,比如
(lis++)随机列表
@CSnerd
randGrid::Int->Float->IO[Int]
randGrid n p=(mapM.mapM)(const$singleRandP)$(replicate n.replicate n)1
,其中
singleRandP::Float->IO Int
生成具有概率
p
1
。另外,请停止更新同一个问题,如果您有其他问题,您可以重新提出一个问题。已解决!谢谢:)下次提问之前我会考虑很多!嗨,如果我想把一个随机数列表附加到一个普通的列表上怎么办。我该怎么做?例如:一个普通的列表
[]
附加一个随机列表
[1,2,3]
(这些数字是由函数drawFloat生成的)?@CSnerd如果你想附加一个随机数字列表,你可以创建一个生成随机列表的函数,比如
randList=mapM(const$rawFloat 2 10)[1..n]
然后再附加这个函数,比如
(lis++)随机列表
@CSnerd
randGrid::Int->Float->IO[Int]
randGrid n p=(mapM.mapM)(const$singleRandP)$(replicate n.replicate n)1
,其中
singleRandP::Float->IO Int
生成具有概率
p
1
。另外,请停止更新同一个问题,如果您有其他问题,您可以重新提出一个问题。已解决!谢谢:)下次提问之前我会考虑很多!