此代码来自在线教程,但并未真正说明此打印“ Hello,World”的haskell代码背后的逻辑。您能解释一下这里到底发生了什么吗?我对最后一行中发生的事情以及它如何打招呼感到非常困惑= Hello。为什么需要“谁”?有什么意义?以及为什么不只是设置为“ hello”。我应该从这段代码中学到什么?请原谅我,因为我刚刚进入函数式编程世界,我认为显而易见的事情飞到了我的头上。
main :: IO ()
main = putStrLn (greet "World")
greet who = "Hello, " ++ who
答案 0 :(得分:3)
在问题的各行之间阅读,听起来就像是在阅读
(greet "World")
将字符串greet
与"World"
串联在一起。但是在Haskell中,这是编写函数调用及其参数的方式。诸如C或Java之类的语言会将其写为
greet ("World")
在Haskell中,括号不用于函数参数;相反,它们仅用于操作员优先级。 “函数应用程序”(意味着在某些参数上调用函数)的行为类似于具有最高优先级的不可见运算符。
答案 1 :(得分:2)
如果您查看此功能的签名,可能会有所帮助。这是在函数greet
接受String
并输出String
的情况下读取的。 String
类型只是[Char]
greet :: String -> String
greet who = "Hello, " ++ who
是一个带有一个参数who
的函数。 ++
运算符可以附加两个列表,并且由于字符串是Haskell中的字符列表,它将像这样附加列表:
['H', 'e', 'l', 'l', 'o', ',', ' '] ++ ['W', 'o', 'r', 'l', 'd']