gpt4 book ai didi

涉及 bool 运算和 Do 的 Haskell Guards

转载 作者:行者123 更新时间:2023-12-02 12:01:54 29 4
gpt4 key购买 nike

我刚刚开始使用 wikibook 学习 Haskell,自从我使用 Visual Basic 和 Java 学习了非常基础的 HS 类(class)以来,到目前为止,我的表现还不错,但是当我尝试结合更多内容时,Haskell 的一些奇特功能让我感到困惑比一。其中一本维基书籍存在一个练习问题,即根据用户输入的某些名称编写三个不同的字符串。使用 if-then-else 语句时这很好,但是当我尝试使用防护时,我在第 6 行收到解析错误。

    main = do
putStrLn "What is your name?"
n <- getLine
|(n == "Simon") || (n == "John") || (n == "Phil")
= putStrLn "Help me make this stuff"
|n == "Koen" = putStrLn "How is this a parse error"
|otherwise "Line 11 looks fine to me"

Which reads " error: parse error on input ‘|’"
Is this a problem with the guard | or the operator ||? the error lists it is on 6:9 if that helps.

编辑:既然有人回答了我的第一个问题,我还有一个关于非常相似主题的问题。 Wikibooks Haskell 教程将此列为练习的另一个解决方案,使用 where 语句而不是 if-then-else:

main = do
putStrLn "Hello, what is your name?"
name <- getLine
putStrLn (message name)
where
greatlanguage = "I think Haskell is a great programming language."
message "Simon" = greatlanguage
message "John" = greatlanguage
message "Phil" = greatlanguage
message "Koen" = "I think debugging Haskell is fun."
message _ = "Sorry, I don't know you."

是否可以使用||运算符以某种方式将西蒙、约翰和菲尔这 3 行调用伟大语言的行压缩成一行?

最佳答案

守卫只能插入到函数定义中(格式为 func a b | condition = ...)和 case block (格式为 case x模式 | 条件 -> ...);您无法按照您尝试的方式将它们插入到 do block 中。您需要在此处使用 if ... then ... else

关于涉及 bool 运算和 Do 的 Haskell Guards,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53454632/

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