gpt4 book ai didi

if-statement - 在 OCaml 中编写漂亮的多级嵌套 if-then-else 代码?

转载 作者:行者123 更新时间:2023-12-03 16:43:31 24 4
gpt4 key购买 nike

在 OCaml 中,如果我必须使用许多 if-then-else 编写一个函数,下面是我愚蠢而丑陋的解决方案。

let foo () =
let a1 = ... in
if (a1) then
result1
else
let a2 = ... in
if (a2) then
result2
else
let a3 = ... in
if (a3) then
result3
else
let a4 = ... in
if (a4) then
result4
else
result5.

如何美化上面的代码?我喜欢 C/C++ 和 Java 风格,它们使用“返回”来保存下一个 if 语句的缩进。
我可以用 OCaml 做同样的事情吗?
int foo () = {
bool a1 = ...;
if (a1)
return result1;

bool a2 = ...;
if (a2)
return result2;

bool a3 = ...;
if (a3)
return result3;

bool a4 = ...;
if (a4)
return result4;

return result5;
}

最佳答案

没有return OCaml 中的语句,尽管您可以在异常的帮助下模拟一个:

exception Ret of t

let my_ret x = raise (Ret x)

let foo () =
try
let a1 = ... in
if a1 then my_ret result1;
let a2 = ... in
if a2 then my_ret result2;
...
with Ret x -> x

另一个有用的解决方案是使用惰性求值:
let foo () =
let a1 = lazy ...
and a2 = lazy ...
and a3 = lazy ...
in
match a1, a2, a3 with
| lazy true, _, _ -> result1
| _, lazy true, _ -> result2
| _, _, lazy true -> result3
| _, _, _ -> result4

这是使用 lazy 的示例之一,可能有更简洁的方法来表达您的计算。

关于if-statement - 在 OCaml 中编写漂亮的多级嵌套 if-then-else 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28515699/

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