gpt4 book ai didi

coding-style - 我可以在 Haskell 中避免 "rightward drift"吗?

转载 作者:行者123 更新时间:2023-12-03 15:23:04 25 4
gpt4 key购买 nike

当我使用命令式语言时,我经常编写如下代码

foo (x) {
if (x < 0) return True;
y = getForX(x);
if (y < 0) return True;

return x < y;
}

也就是我一一检查条件,第一时间出 block
尽可能。

我喜欢这样,因为它使代码保持“平坦”并遵守“结束”的原则
重量”。我认为它更具可读性。

但是在 Haskell 中,我会写成
foo x = do
if x < 0
then return x
else do
y <- getForX x

if y < 0
then return True
else return $ x < y

我不太喜欢。我可以使用允许爆发的单子(monad),但是
因为我已经在使用 monad 我不得不 lift一切,这增加了单词
如果可以的话,我想避免。

我想这并没有一个完美的解决方案,但有人有吗
有什么建议吗?

最佳答案

对于您的具体问题:如何悬挂do符号和逻辑的使用?

foo x = do
if x < 0 then return x else do
y <- getForX x
return $ y < 0 || x < y

编辑

结合 hammar 说的,甚至可以得到更漂亮的代码:
foo x | x < 0     = return x
| otherwise = do y <- getForX x
return $ y < 0 || x < y

关于coding-style - 我可以在 Haskell 中避免 "rightward drift"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7008493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com