2013-04-25 54 views
1

我们正在努力学习Haskell(大约第5次!),并仍然在努力解决一些基本问题。我怎么能写第一个版本,但不是第二个版本?

怎么让我可以写

main = print (map (* 2) [1..5]) 

,但我不能写

myfunc x = 
    map ((+ x) [1..5]) 

main = print (myfunc 2) 

任何指导,将不胜感激---我们平时的书籍,但他们没有真正帮助。

+0

为什么不呢?什么是编译器消息? – 2013-04-25 16:35:58

+3

你期望表达式'((+ x)​​[1..5])'做什么? – 2013-04-25 16:36:44

+0

我期望在一个函数中调用它,该函数为x传递一个值,并返回一个由原始列表组成的新值列表,每个项目都增加x的值。我只是想把我的头围绕基础。编译器的消息对我来说还没有多大意义,尽管我确信在我们了解更多的时候它们会更容易理解。 – David 2013-04-25 17:52:51

回答

11

你弄错了括号。你想:

myfunc x = map (+x) [1..5] 
9

在清理任何误解的希望促使这样的:在Haskell,功能应用是左结合,较高的“优先级”,比任何缀操作,并且不需要任何括号。圆括号仅用于分组子表达式:(f x) yf x y相同,而f (g x)需要括号。

+0

谢谢......我甚至知道这个事实,但并不适用于这种情况。 – David 2013-04-25 17:54:16

相关问题