我是哈斯克尔的新手,如果有人愿意帮助我,我会很高兴的!我正在尝试让这个程序使用do-while循环。
第二个getLine命令的结果被放入变量goGlenn中,如果goGlenn不等于“start ”,那么程序将返回起点
start = do
loop $ do lift performAction
putStrLn "Hello, what is your name?"
name <- getLine
putStrLn ("Welcome to our personality test " ++ name ++ ", inspired by the Big Five Theory.")
putStrLn "You will receive fifty questions in total to which you can reply with Yes or No."
putStrLn "Whenever you feel ready to begin please write Start"
goGlenn <- getLine
putStrLn goGlenn
while (goGlenn /= "start")
不确定,也许这个版本可以帮助您:
import Control.Monad
loop action = do
condition <- action
when condition (loop action)
while = return
start =
let action = do {
putStrLn "Hello, what is your name?";
name <- getLine;
putStrLn ("Welcome to our personality test " ++ name ++ ", inspired by the Big Five Theory.");
putStrLn "You will receive fifty questions in total to which you can reply with Yes or No.";
putStrLn "Whenever you feel ready to begin please write Start";
goGlenn <- getLine;
putStrLn goGlenn;
while (goGlenn /= "start");
}
in loop action
(编辑)或者也可以:
start =
loop (do {
putStrLn "Hello, what is your name?";
name <- getLine;
putStrLn ("Welcome to our personality test " ++ name ++ ", inspired by the Big Five Theory.");
putStrLn "You will receive fifty questions in total to which you can reply with Yes or No.";
putStrLn "Whenever you feel ready to begin please write Start";
goGlenn <- getLine;
putStrLn goGlenn;
while (goGlenn /= "start");
})
在Haskell中,大多数情况下,您递归地编写“循环”。
import Control.Monad
-- ....
start = do
putStrLn "Before the loop!"
-- we define "loop" as a recursive IO action
let loop = do
putStrLn "Hello, what is your name?"
name <- getLine
putStrLn $ "Welcome to our personality test " ++ name
++ ", inspired by the Big Five Theory."
putStrLn "You will receive fifty questions in total to which you can reply with Yes or No."
putStrLn "Whenever you feel ready to begin please write Start"
goGlenn <- getLine
putStrLn goGlenn
-- if we did not finish, start another loop
when (goGlenn /= "start") loop
loop -- start the first iteration
putStrLn "After the loop!"
我刚开始学习Haskell,但是现在没有循环是非常令人沮丧的。我想出了如何为函数编写循环。然而,我的问题是,我想在迭代循环时输出一些结果。似乎我必须使用debug来执行这个简单的任务。 所以现在我只想举一个例子,说明如何在主结构中打印字符串10次。 换句话说,我想这样做10次: 谢谢。我觉得这对我的任务很有启发。
Haskell是一种纯函数式编程语言,它的命名源自美国数学家Haskell Brooks Curry,他在数学逻辑方面上的工作使得函数式编程语言有了广泛的基础。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算为基础发展而来。这也是为什么Haskell语言以希腊字母“λ”(Lambda)作为自己的标志。Haskell语言的最重要的两个应用是Glasgow Hask
Haskell中的Zippers是一个指向数据结构(例如树)的某些特定位置的指针。 假设具有5个元素的树,可以将其表示为完全二叉树。如果要更新此列表的最后一个元素,则需要遍历所有元素以到达最后一个元素,然后再进行更新。 但是,如果我们以具有N个元素的树是的集合的方式构造树,那该怎么办? 那么,可以不需要遍历所有不需要的(N-1)个元素。直接更新第N个元素,这正是Zipper的概念。它聚焦或指向树的
单子(Monad)只是一种带有某些附加功能的Applicative Functor。它是一个类,它管理三个基本规则(称为一元规则)。 这三个规则严格适用于Monad声明,如下所示: 单子(Monad)式声明的三个基本原则是: 左标识定律 - 返回函数不会更改值,并且不应更改Monad中的任何内容。可以表示为:; 右标识定律 - 返回函数不会改变值,也不会改变Monad中的任何内容。它可以表示为:;
Hoogle认为,(Kleisli单子合成,或“左鱼”)和(reverse monad bind)的固定性为。如果我没看错的话,一个表达式,比如 应该是无效的,因为它相当于同样无效的 但是出于某种原因,尽管第一个表达式在Haskell中似乎无效,但正如所料,Frege似乎没有抱怨,并在之前计算。 当我在pointfree.io上搞清楚如何制作类似
Mu for Haskell This repo defines a set of libraries to write microservices in a format- and protocol-independent way. It shares the same goals as Mu for Scala, but using idiomatic Haskell and more typ