Haskell 哈斯克尔的你好世界
这段代码来自一个在线教程,它没有真正解释打印“Hello,World”的haskell代码背后的逻辑。你能解释一下这里到底发生了什么事吗。我对最后一行中发生的事情以及它如何使greet=Hello感到特别困惑。为什么需要“谁”?它的意义是什么?为什么问候不只是被设置为“你好”。我应该从这个代码片段中学到什么?请原谅我,因为我刚刚进入函数式编程的世界,我认为一些显而易见的事情刚刚掠过我的头Haskell 哈斯克尔的你好世界,haskell,Haskell,这段代码来自一个在线教程,它没有真正解释打印“Hello,World”的haskell代码背后的逻辑。你能解释一下这里到底发生了什么事吗。我对最后一行中发生的事情以及它如何使greet=Hello感到特别困惑。为什么需要“谁”?它的意义是什么?为什么问候不只是被设置为“你好”。我应该从这个代码片段中学到什么?请原谅我,因为我刚刚进入函数式编程的世界,我认为一些显而易见的事情刚刚掠过我的头 main :: IO () main = putStrLn (greet "World") gree
main :: IO ()
main = putStrLn (greet "World")
greet who = "Hello, " ++ who
如果您查看此函数的签名,可能会有所帮助。这是因为函数
greet
接受String
并输出String
。字符串
类型只是[Char]
greet :: String -> String
greet who = "Hello, " ++ who
是一个函数,它接受一个参数who
。++
操作符可以附加两个列表,因为字符串是Haskell中的字符列表,所以它会像这样附加列表:
['H', 'e', 'l', 'l', 'o', ',', ' '] ++ ['W', 'o', 'r', 'l', 'd']
在你问题的字里行间阅读听起来你好像在阅读
(greet "World")
将字符串greet
与“World”
连接起来。然而,在Haskell中,这就是编写函数调用及其参数的方式。像C或Java这样的语言可以这样编写
greet ("World")
在Haskell中,括号不用于函数参数;相反,它们仅用于操作员优先级。“函数应用程序”(意味着对某些参数调用函数)的作用类似于具有最高优先级的不可见运算符。这是一个示例程序,展示了一个函数
greet
,该函数接受一个名称,并返回一个新的字符串来问候该名称。确保可以将其设置为一个简单的字符串值,而不是带有greet=“Hello,World”
和main=putStrLn greet
的函数,就像可以将示例表达式1+1
重写为2
一样。