for 循环中的分号单个表达式

2023-12-20

为什么最后有一个分号Proc.num_stack_slots.(i) <- 0在下面的代码中? 我认为分号是 OCaml 中的分隔符。我们是否可以始终为块的最后一个表达式添加一个可选的分号?

for i = 0 to Proc.num_register_classes - 1 do
  Proc.num_stack_slots.(i) <- 0;
done;

See https://github.com/def-lkb/ocaml-tyr/blob/master/asmcomp/coloring.ml https://github.com/def-lkb/ocaml-tyr/blob/master/asmcomp/coloring.ml完整示例的第 273 行。


该表达式后面不需要分号,但出于语法礼貌,这里允许使用分号。在您引用的示例中,有一个分号,因为它后面跟着第二个表达式。

本质上,您可以将分号视为二元运算符,它采用两个单元表达式,从左到右执行它们,然后返回一个单元。

val (;): unit -> unit -> unit

那么下面的例子会更容易理解:

for i = 1 to 5 do
    printf "Hello, ";
    printf "world\n"
done

here ;只是起到胶水的作用。允许放置一个;在第二个表达式之后,但仅作为语法糖,无非是编译器开发人员的礼貌。

如果您打开 OCaml 编译器的解析器定义,您将看到,a 中的表达式seq_expr可以以分号结束:

seq_expr:
  | expr        %prec below_SEMI  { $1 }
  | expr SEMI                     { reloc_exp $1 }
  | expr SEMI seq_expr            { mkexp(Pexp_sequence($1, $3)) }

这意味着你甚至可以编写这样奇怪的代码:

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

for 循环中的分号单个表达式 的相关文章

  • \add_34/U1_1_6 的 Verilog 命名约定

    有人可以解释一下这个命名约定在下面的 Verilog 行中意味着什么吗 我不知道这是什么 add 34 部分的意思是 ADDHXL add 34 U1 1 6 A n1022 B add 34 carry 6 CO add 34 carry
  • 如何强制 OCaml 推断出更通用的类型?

    我想定义一个接受可选参数的函数 该参数是一个函数 a gt b 默认值应该是identity 实际上就是 a gt a 但我认为没有理由它不应该与更通用的兼容 a gt b 当我尝试时 let optional apply f i matc
  • 为什么允许在 for 循环中使用列表订阅? [复制]

    这个问题在这里已经有答案了 Python 如何接受以下构造 l 1 2 3 4 for i l i in enumerate l print l i 似乎没有任何抱怨 愉快地打印出来1 2 3 4 这是如何被允许的以及它到底有什么作用 Th
  • Javascript:使用 IIFE 和块语句之间的区别

    IIFE主要用于封装作用域 function let myVar 10 not global 但为什么不直接使用块语句呢 let myVar 10 also not global 除了范围封装之外 进一步使用 IIFE 是否还有其他好处 块
  • 什么是{| ... |} 在 JavaScript 中是什么意思? [复制]

    这个问题在这里已经有答案了 通读 javascript 代码库 我遇到了如下代码块 export type RouteReducerProps error Error isResolving boolean isResolved boole
  • 如何检查字符串是否具有正确的 html 语法

    我想检查给定的字符串是否具有正确的 html 语法 我不知道哪些 html 元素应该在里面 我唯一知道的一件事是字符串应该是正确的 html 表达式 有人知道如何在 C 中检查它吗 您可以使用 Html 敏捷包 http html agil
  • 为什么没有参数标识符的函数在 C++ 中有效?

    给定一个 C 函数 其参数仅为类型且没有标识符 void foo1 int int int cout lt lt called foo1 我可以这样称呼它 int main foo1 10 10 10 为什么这是 C 中的有效构造 这只是
  • jquery 隐藏简单的 javascript 错误

    我在 chrome 和 firefox 中使用 jQuery 和 flot 当我编写代码时 我发现执行在一些愚蠢的事情上会默默失败 例如访问不存在的哈希结构等 感觉 jQuery 中有一些 try catch 逻辑 让我看不到任何错误 有没
  • 为什么计算斐波那契数需要很长时间?

    几天前我开始学习Ocaml 我尝试编写一个斐波那契数字程序 let rec fib a if a 1 a 2 then 1 else fib a 1 fib a 2 该代码不是最佳的 因为我不知道如何处理异常情况 但现在 如果我尝试计算 f
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何迭代 Bash 中变量定义的数字范围?

    当范围由变量给出时 如何在 Bash 中迭代数字范围 我知道我可以做到这一点 在 Bash 中称为 序列表达式 文档 http www gnu org software bash manual bashref html Brace Expa
  • 变体的结构比较

    我想处理整数行的限制 我想拥有Pervasives compare treat RightInfinity gt Point x对全部x 以及反函数LeftInfinity In the ocaml REPL type open pt Le
  • 在 C++ 中,为什么我们不能使用 > 和 < 来比较迭代器? [复制]

    这个问题在这里已经有答案了 我被问过这个问题 我真的不知道为什么 如果你有指针int x 您可以将指针与 gt and lt 因为它代表内存位置 例如0x0000 0x0004 0x0008等等 我知道迭代器和指针是不同的 但它们的行为方式
  • 我不喜欢这个……这是欺骗语言吗?

    我已经见过几次类似下面的东西了 我讨厌它 这基本上是在 欺骗 语言吗 或者 您是否认为这是 可以 因为 IsNullOrEmpty 始终首先被评估 我们可能会争论一个字符串从函数中出来时是否应该为 NULL 但这并不是真正的问题 strin
  • 你能在 Python 语法中添加新的语句吗?

    您可以添加新的语句 例如print raise with 到 Python 的语法 说 允许 mystatement Something Or new if True print example 没那么多 如果你should 而是如果可能的
  • 您能给我解释一下 OCaml 函子吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在函数式编程中 什么是函子 https stackoverflow com questions 2030863 in functional programming what is a functor
  • Bash 中的动态变量名称

    我对 bash 脚本感到困惑 我有以下代码 function grep search magic way to define magic variable 1 ls tail 1 echo magic variable 1 我希望能够创建一
  • 澄清Update() 和FixedUpdate() 的使用? Unity2D [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 所以我知道FixedUpdate应该用于物理操作等 但我很难理解什么算作物理 例如 我通过查看按下的键来移动角色 然后施加力 目前我正
  • 返回“!”是什么意思?铁锈中的意思是什么?

    最近我在 Rust 中发现了一个返回的函数 而不是基本类型 如下所示 fn my function gt 这是什么意思 我无法在中找到有关此的信息锈迹斑斑的书 https doc rust lang org book 该函数使用此类指标返回
  • Razor 语法在 UI 标记方面是否提供了令人信服的优势?

    我注意到斯科特 格思里开始提及剃须刀 http weblogs asp net scottgu archive 2010 07 02 introducing razor aspx a fair bit http weblogs asp ne

随机推荐

  • 将指针绑定到 C++ 中的成员运算符

    它们有什么意义呢 我从未将它们用于任何用途 而且我根本不认为自己需要使用它们 我是否遗漏了一些关于它们的信息 或者它们几乎毫无用处 编辑 我对它们了解不多 所以可能有必要对它们进行描述 PMF 指向成员函数的指针 类似于普通 静态 函数指针
  • 调用 MS Access 查询,该查询从 Delphi ADO 组件调用模块中的 VBA 函数

    我在 MS Access 模块中创建了一个函数 比方说Calculate A B 我还在 MS Access 中创建了一个查询来使用此函数 比方说 UPDATE aTable SET aField Calculate bField cFie
  • 如何停止忽略子树子目录中的文件模式?

    我正在将 Git 用于我自己的 Unity 项目 我是唯一的开发人员 所以我可以使用破坏性命令 Unity 开发人员可能知道 Unity 为 Assets 文件夹 项目的主文件夹 下的所有内容创建 meta 文件 这些文件 必须 与原始文件
  • 如何在 Asana 中按用户获取任务

    我刚刚开始使用 Asana API 让自己成为一个小工具来概览分配给我的所有任务 我可以做各种各样的事情 比如获取所有工作组 项目 用户 项目任务等 但不知何故 我找不到如何获取每个用户的所有任务 当您登录 Asana 时 您可以概览分配给
  • 释放内存时堆损坏

    我有一堂课如下 struct CliHandler CliHandler int argc char argv CliHandler int doWork int argc char argv private CliHandler cons
  • 在jupyterlab中使用plot.ly - 图形不显示

    我想用 pylot 绘制 3D PCA 散点3d 但是图形没有显示在朱皮特拉实验室只有在jupyter笔记本 我已经安装了 jupyterlab plotly 包 并且能够创建 jupyterlab plotly Plotly 对象 但我无
  • Spring Batch - 远程分区

    目前 我们正在将批处理作业从 java 迁移到 Spring Batch 该批处理作业从数据库和 Web 服务获取输入 我们需要在四台服务器上运行此作业以提高性能 因为此作业正在处理大量数据 上述场景可以通过Spring Batch中的远程
  • 打开辅助窗口后,Windows.Current.Content 的值应该是多少?

    这是 Template10 文章中 App 类中的建议代码实施外壳 https github com Windows XAML Template10 wiki Controls implementing a shell public ove
  • 查找多个数组中最常见的元素组合

    我有几个数组 例如 var arr1 new A B C D var arr2 new A D var arr3 new A B var arr4 new C D var arr5 new B C D var arr6 new B A et
  • 类似于 $.datepicker.formatDate 的函数用于格式化时间?

    With datepicker formatDate我只能格式化日期 这意味着如果我传入一个 Date 对象 我只能格式化它的日期部分 而不能格式化时间部分 是否有任何等效的函数允许时间部分也被格式化 解析 最好使用相同的语法 我正在使用以
  • C# XPath 帮助 - 表达式不起作用

    下面是一个示例 XML 文档 与我从中获取信息的文档相匹配
  • 在 data.table R 中使用 lapply .SD

    我不太清楚使用 SD and by 例如 下面的代码片段是否意味着 更改中的所有列 DT分解除A and B 它还说在data table手动的 SD指的是子集data table对于每个组 不包括分组列 所以列A and B被排除在外 D
  • 从 Java 运行 TypeScript 编译器

    我正在尝试从我的 Java 应用程序运行 TypeScript 编译器 首先 我试图弄清楚是否可以在没有 Node js 的情况下从命令行运行编译器 jsc tsc js 但这样我就不会收到任何错误 也不会提供帮助 jsc tsc js m
  • 避免简单增量器中的状态

    我正在尝试使用 JavaScript 函数式编程技术来避免状态 我牢牢掌握了许多基本的 FP 技术 例如闭包 柯里化等等 但我无法全神贯注于处理状态 我想知道创建功能程序的人如何实现以下非常简单的应用程序 用户单击浏览器中的按钮 jQuer
  • 如何使用 shell 脚本从文件中获取变量的值?

    有一个文件post check ini我需要为以下设置的值 Max value 2 我如何获得价值2 from Max value try grep Po lt Max value post check ini
  • Fresco 在大图像 (>2048px) 上的自动调整大小功能可以禁用/调整吗?

    在长尺寸 gt 2048px 的图像上 Fresco自动应用调整大小 https frescolib org docs troubleshooting html Android 无法显示任一维度长度超过 2048 像素的图像 这超出了Ope
  • Leaflet Control Search:打开弹出窗口搜索结果

    我正在使用很棒的插件传单 控制 搜索 http labs easyblog it maps leaflet search 为了在我的地图上搜索标记 来自 geoJson 标记组 效果很好 我现在只有一个简单的问题 如何打开搜索结果标记的弹出
  • Google 在 SingleChildScrollView 中的表单内绘制地图

    我有一个google map inside column inside SingleChildScrollView 我可以水平平移地图 但是垂直平移时SingleChildScrollView捕获事件并自行滚动 我如何在收到任何事件时平移地
  • QGraphicsView fitInView 边距

    为什么这个 graphics view gt fitInView scene gt sceneRect Qt KeepAspectRatio 没有按预期工作 它没有正确适合场景矩形 显示其周围的边距 原因是这样的 https bugrepo
  • for 循环中的分号单个表达式

    为什么最后有一个分号Proc num stack slots i lt 0在下面的代码中 我认为分号是 OCaml 中的分隔符 我们是否可以始终为块的最后一个表达式添加一个可选的分号 for i 0 to Proc num register