尝试生成伪随机整数列表

我正在尝试创建一个 Int 随机数列表,该列表是通过从作为函数输入之一的随机索引开始的另一个 1000 个随机数列表中获取 62 个数字而制成的。这是我目前拥有的:

num :: [Int]->Int->[Int]
num list index = numGenerator list index 62
numGenerator :: [Int]->Int->Int->[Int]
numGenerator list index counter 
    | counter == 0 = []
    | otherwise = list !! index :: numGenerator((list), (index + 1),(counter - 1))
 main = do
    let numGen =  num 100 

我是haskell的新手,所以请告诉我我做错了什么,谢谢!

回答

主要问题是:

  • 运算符::用于注释带有类型签名的表达式。您希望运算符:将元素添加到列表中。
  • 在 Haskell 中,多参数函数不像 那样被调用f(a,b,c)。它们被称为 like f a b c,并在必要时添加括号。您的递归调用numGenerator需要修复以匹配正确的语法。
  • 缩进很重要 -main必须与numGenerator.
  • 在 中main,您调用num 100,但num需要一个列表和一个整数,而不仅仅是一个整数。
  • 在 中main,你的 do-block 以一个let语句结束。那是不允许的。您需要以 IO 操作结束它,例如打印结果或其他内容。

解决这个问题,你会得到类似的东西:

num :: [Int] -> Int -> [Int]
num list index = numGenerator list index 62

numGenerator :: [Int] -> Int -> Int -> [Int]
numGenerator list index counter
    | counter == 0 = []
    | otherwise = list !! index : numGenerator list (index + 1) (counter - 1)

main = do
  let numGen =  num [1..1000] 100
  print numGen

这似乎有效,尽管结果不是很随机,因为我的测试提供了绝对非随机的 list [1..1000]

您犯的错误表明您还没有掌握编写 Haskell 程序的许多基础知识。希望您已经看到了这个问题,并且正在研究答案中的资源。

可能还会发现安装和使用 Haskell IDE 很有帮助。我听说 Visual Studio Code 易于使用且运行良好。IDE 会尽早标记语法错误,因此您可以随时修复它们,而不是编写多个函数,然后发现您有许多无法理解且需要以某种方式解决的错误消息。

但是,我认为如果您必须优先考虑其中一个,那么学习更多教程比启动并运行 Haskell IDE 更重要。


以上是尝试生成伪随机整数列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>