2013-04-25 55 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

相關問題