我們正在努力學習Haskell(大約第5次!),並仍然在努力解決一些基本問題。我怎麼能寫第一個版本,但不是第二個版本?
怎麼讓我可以寫
main = print (map (* 2) [1..5])
,但我不能寫
myfunc x =
map ((+ x) [1..5])
main = print (myfunc 2)
任何指導,將不勝感激---我們平時的書籍,但他們沒有真正幫助。
我們正在努力學習Haskell(大約第5次!),並仍然在努力解決一些基本問題。我怎麼能寫第一個版本,但不是第二個版本?
怎麼讓我可以寫
main = print (map (* 2) [1..5])
,但我不能寫
myfunc x =
map ((+ x) [1..5])
main = print (myfunc 2)
任何指導,將不勝感激---我們平時的書籍,但他們沒有真正幫助。
你弄錯了括號。你想:
myfunc x = map (+x) [1..5]
在清理任何誤解的希望促使這樣的:在Haskell,功能應用是左結合,較高的「優先級」,比任何綴操作,並且不需要任何括號。圓括號僅用於分組子表達式:(f x) y
與f x y
相同,而f (g x)
需要括號。
謝謝......我甚至知道這個事實,但並不適用於這種情況。 – David 2013-04-25 17:54:16
爲什麼不呢?什麼是編譯器消息? – 2013-04-25 16:35:58
你期望表達式'((+ x)[1..5])'做什麼? – 2013-04-25 16:36:44
我期望在一個函數中調用它,該函數爲x傳遞一個值,並返回一個由原始列表組成的新值列表,每個項目都增加x的值。我只是想把我的頭圍繞基礎。編譯器的消息對我來說還沒有多大意義,儘管我確信在我們瞭解更多的時候它們會更容易理解。 – David 2013-04-25 17:52:51