gpt4 book ai didi

haskell - 如何在haskell中的do表示法中使用let inside if block

转载 作者:行者123 更新时间:2023-12-01 23:39:05 25 4
gpt4 key购买 nike

我收到以下代码的错误:

main = do
putStrLn "Enter parameter"
parameter <- getLine
if head parameter == "c" then
let object = getObject parameter
print object
else
putStrLn "Error, try again"
main

我得到的错误是:
parse error on input `print'

尝试打印对象时。如果我尝试打印函数的值而不保存它,让它工作得很好,但我需要保存该对象以备后用。

语法应该如何使其工作?

同样在“其他”部分,我收到以下错误:
The function `putStrLn' is applied to two arguments,
but its type `String -> IO ()' has only one
In the expression: putStrLn "Error" main

它认为我尝试将 main 作为参数运行到 putStrLn,但我真正想做的是首先显示错误,然后再次运行 main。我怎样才能解决这个问题?

提前致谢!

最佳答案

您的代码存在一些问题。

首先,有解析错误。有两种方法可以解决这个问题。一种是使用 let .. in 块,正如@Lee 指出的那样。

let object = getObject parameter
in print object

或者,我们可以在 else 子句中启动另一个 do 块:
then do
let object = getObject parameter
print object

其次,您将字符串的头部与另一个字符串进行比较:
head parameter == "c"
getLine 返回一个字符串,因此字符串的头部是一个字符。我们可以将其更改为
head parameter == 'c'
最后,您尝试在一个块中执行两个语句,类似于 else 子句中的 before:
else 
putStrLn "Error, try again"
main

如果你想将多个语句链接在一起,我们必须像以前一样使用 do 块:
else do
putStrLn "Error, try again"
main

把它们放在一起:
main = do
putStrLn "Enter parameter"
parameter <- getLine
if head parameter == 'c' then do
let object = getObject parameter
print object
else do
putStrLn "Error, try again"
main

关于haskell - 如何在haskell中的do表示法中使用let inside if block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328828/

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