在 OCaml 中打破循环

2023-12-05

我经常需要在 OCaml 中打破循环,至少有两种方法:

(* by exception *)
try
  for i = 0 to 100 do
    ...
    if cond then raise BreakLoop
  done;
...
with BreakLoop -> ...

(* by while *)
let cond = ref false in
let i = ref 0 in
while (not !cond) && (i<= 100) do
  ...
  i := !i + 1
done;
if !cond then ...

我最关心的是运行时间的优化,只要程序能够轻松阅读和理解即可。道路while当存在多个嵌套循环时,会使循环变得复杂。

我在互联网上的某个地方看到人们说在 OCaml 中抛出和捕获异常的成本很高。有人可以证实我的说法是否属实吗?

所以我们有时应该使用这样的方式while方式,有时会使用exception way?


与其他语言相比,ocaml 中的异常处理速度非常快(只要您使用原始编译器。js_of_ocaml、ocaml-java 等情况有所不同)

然而,具有复杂 while 循环的解决方案仍然会快一点。如果代码在例外情况下更容易阅读(至少在大多数情况下),我不会关心最小的速度差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OCaml 中打破循环 的相关文章

随机推荐

  • 主干,而不是“this.el”包装

    我广泛使用模板 我喜欢用完全包含模板 我的意思是我想看到template对所有 DOM 元素进行编码 包括root一 像这样 但 Backbone 喜欢的是template像这样
  • 如何以编程方式清除或更新 Azure AD B2C MFA 的电话号码?

    我们正在使用此处找到的示例在 Azure AD B2C 上测试 MFA https github com azure ad b2c samples tree master policies mfa unknown devices 我们知道这
  • 如何通过javascript获取查询字符串?

    如何从 JavaScript 中的 URL 中提取查询字符串 谢谢你 您可以轻松构建字典风格的集合 function getQueryStrings var assoc var decode function s return decode
  • 将 QGraphicsScene 保存到 Svg 会更改缩放比例

    我需要保存我的项目QGraphicsScene到 svg 并能够将该 svg 加载回场景 我能做到 但每次将画布保存到 svg 时 加载时项目都会变大 并且重复保存和加载相同的 svg 会导致其增大 我找不到原因 我附上了示例代码 以及结果
  • 如何从外部更新 JavaFX 场景?

    我正在尝试学习 JavaFX 并将 swing 应用程序转换为 JavaFX 我想做的是使用JavaFX来显示程序的进度 我之前在 Swing 中所做的事情是首先使用自定义 JComponent 创建一个 JFrame 然后让我的主程序调用
  • 我可以使用函数返回 php 中的默认参数吗?

    我想做这样的事情 function readUser aUser loadDefaultUser doing read User 我发现它会向我显示错误 如何将函数返回值作为默认值传递 谢谢 我宁愿给一个Null该参数的值 然后调用load
  • 为什么 PHP crypt() 函数为两个不同的字符串返回相同的内容?

    我正在使用 PHPcrypt函数用于密码散列 加密 但我认为我做得不对 因为 nathan12 和 nathan123 都允许我登录系统上的帐户 实际密码是 nathan123 因此 nathan12 或者其他什么应该NOT允许我登录 这是
  • 使用 patchify 库创建补丁时出现问题

    我正在使用 patchify 库来创建更大的 jpg 图像的补丁 我使用以下代码 取自此 YT 视频 当 YT 人员读取他的图像 12 张 tiff 图像 时 他会得到 large image stack 变量的以下大小 12 768 10
  • Pentaho reportviewer URL 未在 iframe 中加载

    我是 pentaho 新手 我尝试在我使用的 iframe 中使用 pentaho reportviewer 显示报告 prpt文件来加载报告 我在 iframe 中使用了以下网址 http 172 20 10 30 8080 pentah
  • 在 AVD 上运行 SIP 演示 Android 平台 2.3

    Android 2 3平台包含一个SIP演示项目 我想在两个 AVD 上测试这个项目 而不是在真正的 Android 设备上 我真的不知道如何继续 From 测试 SIP 应用程序 测试 SIP 应用程序 要测试 SIP 应用程序 您需要以
  • Python在方法内使用tkinter显示变量

    我刚刚编写的程序是我了解 Tkinter 工作原理的游乐场 我的问题是如何将变量 timelabel 显示为标签 我已经制作了一个名为 时间刷新 的标签 但它没有显示 我知道 DigitalClock 类的编写效率不高 我是新来的 def
  • 在 C 或 C++ 中以编程方式删除非空目录

    如何在C或C 中删除非空目录 有什么功能吗 rmdir 只删除空目录 请提供一种不使用任何外部库的方法 还告诉我如何用 C 或 C 删除文件 您想要编写一个函数 递归函数是最简单的 但很容易耗尽深层目录上的堆栈空间 来枚举目录的子目录 如果
  • 具有扩展密钥用法的证书仅适用于 Firefox

    我尝试为多个域的服务器生成自签名证书 我在 v3 req 扩展中使用了 openssl 我使用此命令行生成具有多个域和扩展密钥用法的证书 openssl x509 req days 3650 in san domain com csr si
  • atexit 函数的目的是什么?

    我知道函数的地址何时传递给atexit功能 该函数被执行 include
  • 如何在 aws emr 上使用 -libjars?

    Stack Overflow 上有类似的问题 但没有一个回答这个问题 当按照以下链接时出现问题http grepalex com 2013 02 25 hadoop libjars 我们需要使用 export HADOOP CLASSPAT
  • 是否有 OutputDebugString 的 Unicode 替代品?

    OutputDebugString 是原生 ASCII 这意味着它在调用 ASCII 版本之前将输入的 Unicode 字符串转换为本地字符串OutputDebugStringA 有没有什么替代方案OutputDebugString 哪个支
  • .htaccess RewriteRule 有效,但地址栏中的 URL 没有变化?

    我一直在抓着头发试图解决这个问题 但没有任何效果 我有一个网页位于mysite com test php我想做一个简单的 URL 重写并将其更改为mysite com testRewrite 实现这一点的代码应该是 Options Foll
  • 如何将包导入 Scala REPL?

    如何将包导入 Scala 的 REPL 中 我正在尝试导入这个名为 funsets 的包 它有一个名为 FunSets 的对象 我尝试了几种变体import funsets and import funsets 等等 但它仍然没有导入包中的
  • Android后台服务和警报

    最近遇到一个问题Android 4 4杀死了我的应用程序Service and AlarmManager当设备进入睡眠模式时 START STICKY参数没有帮助 我尝试了很多东西 但没有任何效果符合我的需要 在我的任务管理器应用程序中 我
  • 在 OCaml 中打破循环

    我经常需要在 OCaml 中打破循环 至少有两种方法 by exception try for i 0 to 100 do if cond then raise BreakLoop done with BreakLoop gt by whi