2014-04-01 47 views
2

我可以簡單地進行操作,如我不能做任何事情哈斯克爾由於語法錯誤

Hugs> 2+2 

例如。或者任何操作,就此而言。

但是,當涉及到實際上是試圖定義一個函數,e.g:

occurs :: Eq a => a -> [a] -> Bool 
occurs x l = x `elem` l 

然後我得到的消息:

ERROR - Syntax error in input (unexpected `=') 

我也得到在其他情況下unexpected `::'。我使用WinHugs。

回答

6

當在交互模式輸入功能,你需要使用let,你也必須用分號分隔行:

let occurs :: Eq a => a -> [a] -> Bool; occurs x l = x `elem` l 
+1

我複製你寫的文章,並得到: >錯誤 - 在表達式語法錯誤(輸入意外結束) –

+2

@ user3482534它工作正常的我,但我使用GHCI而不是擁抱。我誠懇地建議通過Hugs切換到GHC(和[Haskell平臺](http://www.haskell.org/platform/)),它對一些更現代的功能有更好的支持,特別是考慮到最後的構建擁抱是在2006年左右。但這是你的問題的一個側面說明。你可以在定義的周圍使用花括號來嘗試它,比如'let {happen :: ...;發生x l = ...}'? – bheklilr

+1

@bheklilr是正確的。安裝Haskell平臺並使用GHCi或.hs文件運行。擁抱可能更像是阻礙,而不是幫助學習Haskell。 –

6

你需要保存功能,在文件(*名爲.hs )並通過:load <filename>加載它,因爲提示只接受表達式。

8.5. How do I enter function definitions?

的擁抱提示只接受評估表達式。您可以創建一個包含Haskell模塊的文件,並加載該文件(有關詳細信息,請參閱Section 2.2)。

如果您想在REPL環境中試驗函數定義,我建議您改用GHCi。