当前位置: 首页 > 知识库问答 >
问题:

简单Haskell循环

秦禄
2023-03-14

我刚开始学习Haskell,但是现在没有循环是非常令人沮丧的。我想出了如何为函数编写循环。然而,我的问题是,我想在迭代循环时输出一些结果。似乎我必须使用debug来执行这个简单的任务。

所以现在我只想举一个例子,说明如何在主结构中打印字符串10次。

换句话说,我想这样做10次:

main = do  
    putStrLn "a string" 

谢谢。我觉得这对我的任务很有启发。

共有3个答案

赫连飞沉
2023-03-14

我也是Haskell的初学者,我有一个不太优雅但实用有用的解决方案。

main = do 
    putStr result
    where
        string = "a string"
        result = concat [string ++ "\n" | i <- [1,2..10]]

在这里,我们定义了一个列表,其中的元素是要打印出来的字符串,后跟一个新行字符。

司空坚
2023-03-14

哈斯克尔的IO在刚开始的时候有点棘手,因为它是基于单子的。

但你的问题有一个简单的解决方案:

main = replicateM_ 10 $ putStrLn "a string"

这是使用控件中的replicateM_组合器。Monad

它有许多有用的函数来组成和执行一元动作。

赖淇
2023-03-14

您可以定义一个递归函数,它可以打印n次“字符串”(n是函数的参数),如下所示:

printStringNTimes 0 = return ()
printStringNTimes n =
 do
  putStrLn "a string"
  printStringNTimes (n-1)

main = printStringNTimes 10

一种更通用的方法是定义一个函数,该函数可以将任何IO操作重复n次:

repeatNTimes 0 _ = return ()
repeatNTimes n action =
 do
  action
  repeatNTimes (n-1) action

main = repeatNTimes 10 (putStrLn "a string")

上述函数已经存在于Control. Monad中,名称为replicateM_

 类似资料:
  • 主要内容:使用Haskell函数编程,Hello Word程序Haskell是一种函数式编程语言,专门设计用于处理符号计算和列表处理应用程序。函数式编程基于数学函数。除了Haskell,其他遵循函数式编程范式的其他流行语言包括:Lisp,Python,Erlang,Racket,F#,Clojure等。 在常规编程中,指令视为采用特定语法或格式的一组声明,但是在函数式编程下,所有计算都视为独立数学函数的组合。 使用Haskell函数编程 Haskell是一种

  • 我是哈斯克尔的新手,如果有人愿意帮助我,我会很高兴的!我正在尝试让这个程序使用do-while循环。 第二个getLine命令的结果被放入变量goGlenn中,如果goGlenn不等于“start ”,那么程序将返回起点

  • 我刚开始使用Haskell,希望在不安装额外库的情况下制作一个简单的实时游戏。我需要写一个循环,扫描键盘输入,但如果没有输入,游戏也必须运行。我该怎么做?

  • 问题内容: 目前,我正在为Java测试学习。在学习期间,我遇到了一个小问题。 在此for循环中: 输出为: 我的问题是,我不了解。当我阅读这段代码时,我一直认为它应该看起来像这样: 为什么不是这样? 问题答案: i的每次迭代都将开始j的全新迭代。 因此,从i == 1开始,然后在循环中j == 1,2,3。然后i == 2,然后j == 1,2,3循环,依此类推。 一次一步地执行它,这将是有意义的

  • 我已经有几年没有编写代码了,一直在编写简单的Java程序来重新熟悉基本原理。然而,我很难让我的do-while循环按照我想要的方式运行。我想我并不完全理解do-while循环是如何工作的,但我想要的是从System.in中收集作为int的用户输入,并在他们输入其他数据表单时继续请求有效的int输入。我所拥有的是: 这不起作用有两个原因。首先,如果我输入一个非int值,它会立即崩溃,引发输入不匹配异