簡體   English   中英

Haskell中If-Else的語法?

[英]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 ...

thenelse關鍵字需要比匹配的if關鍵字縮進更多:

else if ...
       then ...
       else ...

編輯:不,它變成我錯了。 我已經嘗試過使用if幾種不同的錯誤縮進,並且一切正常。 我不知道你原來的問題是什么。 (標簽字符,也許嗎?)

無論如何,正如@vikingsteve正確指出的那樣,在這種情況下,您可以使用模式防護更好地做到這一點:

alg n
    | condition1 = ...
    | condition2 = ...
    | condition3 = ...
    | condition4 = ...

如果可能的話,這樣做通常更具可讀性。 (當然,並不總是那么容易...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM