Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔的你好世界_Haskell - Fatal编程技术网

Haskell 哈斯克尔的你好世界

Haskell 哈斯克尔的你好世界,haskell,Haskell,这段代码来自一个在线教程,它没有真正解释打印“Hello,World”的haskell代码背后的逻辑。你能解释一下这里到底发生了什么事吗。我对最后一行中发生的事情以及它如何使greet=Hello感到特别困惑。为什么需要“谁”?它的意义是什么?为什么问候不只是被设置为“你好”。我应该从这个代码片段中学到什么?请原谅我,因为我刚刚进入函数式编程的世界,我认为一些显而易见的事情刚刚掠过我的头 main :: IO () main = putStrLn (greet "World") gree

这段代码来自一个在线教程,它没有真正解释打印“Hello,World”的haskell代码背后的逻辑。你能解释一下这里到底发生了什么事吗。我对最后一行中发生的事情以及它如何使greet=Hello感到特别困惑。为什么需要“谁”?它的意义是什么?为什么问候不只是被设置为“你好”。我应该从这个代码片段中学到什么?请原谅我,因为我刚刚进入函数式编程的世界,我认为一些显而易见的事情刚刚掠过我的头

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
一样。