[英]Syntax of If-Else in Haskell?
我一直在尋找其他類似的問題,但是我仍然無法在這里解決問題。 首先,我要說的是,這是家庭作業,但是我不知道自己在哪里錯。 我們的任務是重寫給定的遞歸算法,如果n為0,則返回1,如果n小於5,則返回n,否則將在此處執行最后一行代碼:
alg n = if (n == 0)
then 1
else if (n<5)
then n
else alg(n-1) * alg(n-2) * alg(n-3) * alg(n-4)
我得到的錯誤是WinGHCi中的解析錯誤(可能是縮進不正確或括號不匹配)。 我檢查了很多有關如何正確構建Haskell中的if語句的文章,但是我仍然是一個初學者,所以我不知道我要去哪里。 如果有人能夠告訴我里面有什么不正確的地方以避免將來的錯誤,我將不勝感激。
單獨編寫的行沒有任何問題,因為您可以通過將它們復制到新的Haskell源文件中進行檢查。 如果GHC在這些行之一中報告錯誤,那么實際錯誤可能就在這些行之前,也許是不匹配的括號或if-then,而沒有其他內容或類似內容。
另一種(可以說更簡潔)的方式,可以考慮使用守衛 :
alg n
| n == 0 = 1
| n < 5 = n
| otherwise = alg(n-1) * alg(n-2) * alg(n-3) * alg(n-4)
錯誤消息的答案就在那里:您的縮進是錯誤的。 具體來說,您寫道
else if ...
then ...
else ...
then
和else
關鍵字需要比匹配的if
關鍵字縮進更多:
else if ...
then ...
else ...
編輯:不,它變成我錯了。 我已經嘗試過使用if
幾種不同的錯誤縮進,並且一切正常。 我不知道你原來的問題是什么。 (標簽字符,也許嗎?)
無論如何,正如@vikingsteve正確指出的那樣,在這種情況下,您可以使用模式防護更好地做到這一點:
alg n
| condition1 = ...
| condition2 = ...
| condition3 = ...
| condition4 = ...
如果可能的話,這樣做通常更具可讀性。 (當然,並不總是那么容易...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.