如何在haskell中正確縮進嵌套的case表達式,這將在命令式編程中充當嵌套循環?我應該如何縮進嵌套的case表達式?
f x y = case x of
1 -> case y of
1 ->
2 ->
...
2 -> case y of
...
編譯器給我的第二個X的情況下開始的壓痕錯誤,所以我猜它不理解的是,第一個X案件結束
如何在haskell中正確縮進嵌套的case表達式,這將在命令式編程中充當嵌套循環?我應該如何縮進嵌套的case表達式?
f x y = case x of
1 -> case y of
1 ->
2 ->
...
2 -> case y of
...
編譯器給我的第二個X的情況下開始的壓痕錯誤,所以我猜它不理解的是,第一個X案件結束
您的代碼似乎確定。 Haskell有在維基解釋Indenation的一個非常簡單的規則:這是一些表達的一部分,應該進一步 比表達的開始縮進
代碼。
這個工作對我來說:
f x y = case x of
1 -> case y of
1 -> undefined
2 -> undefined
2 -> case y of
1 -> undefined
你可能要檢查你的編輯器,看它是否在做正確的縮進。正如@Tarmil所建議的,始終使用空格來縮進。對here.
沒有直接回答更多細節,但也可能有助於不過:
在這種特殊情況下,你也可以寫:
f 1 1 = ...
f 1 2 = ...
f 2 2 = ...
,或者作爲一個案例表達:
f x y = case (x, y) of
(1,1) -> ...
(1,2) -> ...
(2,1) -> ...
非常有用,因爲它更具可讀性。 Java正在破壞我的大腦,我感到很愚蠢的想出了這個醜陋的解決方案。 – user3130051
我有同樣的問題,這是因爲我用標籤進行身份驗證。當我用空格縮進代碼時,它就起作用了!
「您可能想檢查您的編輯器,看看是否正在進行正確的縮進。」 - >特別是你可能想檢查它是否使用標籤。我建議你配置它只爲Haskell使用空格。 – Tarmil
@Tarmil或使用'{; }'消除歧義。在這種情況下,它實際上也可以提高可讀性。 –
這確實是一個列表問題,我用空格替換了它們,它使用了完全相同的縮進 – user3130051