如何在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