2017-08-26 58 views
0

我試圖將兩個列表壓縮在一起,但我無法爲我的生活弄清楚爲什麼它不會運行代碼。我有兩個聲明爲變量的列表,並且我寫了一個函數將它們組合在一起。Haskell將兩個列表壓縮在一起

letters = ["a","b","c"] 
numbers = ["1","2","3"] 

comb :: [a] -> [b] -> [(a,b)] 
comb _ [] = [] 
comb [] _ = [] 
comb (x:xs)(y:ys) = (x,y):comb xs ys 

在這裏,我的希望是,這個代碼將遞歸地對組合成元組,但我很新的哈斯克爾,所以我甚至不知道我已經寫的功能(編譯器沒有按」 t抱怨)。

我的問題來了,當我嘗試運行這一行代碼,

comb letters numbers 

和編譯器告訴我:「解析錯誤:模塊頭,進口報關或頂級聲明預期」我不知道我應該在這裏申報什麼。我可以請一些幫助嗎?

+0

你剛剛在文件中間放了那個'comb letters numbers'表達式嗎? – melpomene

+0

它在我的文件的最底部。我宣佈列表,編寫代碼,然後使用梳狀字母數字行 –

回答

4

您不能只將表達式放在文件中。換句話說,你不需要comb;你的問題可以減少到

2 + 2 

什麼,你可能應該做的是加載文件在您選擇(ghci)的交互式解釋,然後鍵入表達式出現,這將正常工作。

或者你可以在你的文件爲main定義:

main = print (comb letters numbers) 

這應該允許它被成功地編譯成可執行。

但重點是,一個文件是一系列的聲明。您的程序的入口點是一個名爲main的符號。無論你如何定義main,就像啓動程序時運行的那樣(並且該東西必須是IO動作,例如由print返回的動作)。