为什么 `;;` 在 utop 中给我一个语法错误?

2023-12-27

我正在开发一个简短的项目,将小程序从 python 转换为 java,反之亦然。 我创建了以下代码,并在 utop 中进行了测试。

let c = 
let x = "for (int i = 0; i<10; i++)" 
and y = "for i in range(0,10):"
in function
| x -> y
| y -> x
| _ -> "Oh no!!";;

由于某种原因,x 和 y 都被认为是未绑定的,但同时任何参数似乎都与 x 匹配。

为了使这项工作正常进行,所有内容都需要按照什么顺序编写?


只是为了跟进您的答案。

在模式匹配中,与变量的匹配似乎不一定与其值匹配。

这就是它被称为的原因模式匹配并不是价值匹配.

顾名思义,模式匹配用于匹配事物patterns, not values。在问题中显示的代码中,您实际上并未将任何内容与x or y,您正在定义名为的模式x and y可以匹配任何东西。请参阅下面的示例:

match 2 with
| x -> "Hey, I matched!"
| _ -> "Oh, I didn't match.";;

- : string = "Hey, I matched!"

请注意,即使这样也有效x之前已定义。比赛中 案例中,x从模式来看实际上是影子另一个。

let x = 42 in
match 1337 with
| x -> Printf.printf "Matched %d\n!" x
| _ -> ();;

Matched 1337!
- : unit = ()

另一方面,模式i when i = x实际上与外部变量的值匹配x,这就是您的自我回答中的代码有效的原因。但这无论如何都不是模式的用途。

你实际上想做的是not模式匹配,它是一个简单的条件语句。

let c argument = 
  let x = "for (int i = 0; i<10; i++)"  in
  let y = "for i in range(0,10):" in
  if argument = x then y
  else if argument = y then x
  else "Oh no!";;

val c : string -> string = <fun>

它正在发挥作用:

c "for (int i = 0; i<10; i++)";;
- : string = "for i in range(0,10):"

c "for i in range(0,10):";;
- : string = "for (int i = 0; i<10; i++)"

c "whatever";;
- : string = "Oh no!"

另外,不要使用and除非您定义相互递归的值。

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

为什么 `;;` 在 utop 中给我一个语法错误? 的相关文章

  • 与 Python 的 range 函数等效的 OCaml 习惯用法是什么?

    我想创建一个从 1 到 的整数列表n 我可以在 Python 中使用range 1 n 1 并在 Haskell 中使用 take n iterate 1 1 正确的 OCaml 习惯用法是什么 我不知道有什么习惯用法 但这里有一个使用中缀
  • 用 OCaml 编写解释器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在大学学习一门课程 要求我从操作语义开始 用 OCaml 编写一种语言的解释器 不幸的是 除了课程
  • 未绑定图形模块

    Running open Graphics OCaml 中返回一个错误 表示它是一个未绑定的模块 在终端 ocaml 中运行它会返回相同的结果 这是否意味着我的图形模块未随 OCaml 软件包一起安装 如果是这样 我该如何安装该模块 在费多
  • 如何将模块与 js_of_ocaml 一起使用?

    我目前正在开发一个用 OCaml 编写并使用 js of ocaml 编译为 javascript 的网站项目 只要我使用该命令只有一个源文件 它就可以很好地工作ocamlfind ocamlc package js of ocaml pa
  • 去掉cpp生成的注释

    I use include frontend tokens mll in lexer mll 进而cpp C P frontend lexer mll o frontend lexer new mll生成lexer new mll 这一直有
  • 在 OCaml 中的 let 命令(即 let _ = ... in)中使用下划线通配符有副作用吗?

    使用 OCaml 时 我几乎总是使用下划线通配符let exp 特别是当结果exp并不重要 重要的是里面的计算 例如 let print endline abc in let a a 1 in let do some thing in 所以
  • OCaml 的并行化能力状况如何?

    我对在项目中使用 OCaml 很感兴趣 但是我不确定它的并行化功能在哪里 OCaml中有消息传递能力吗 OCaml 是否能够有效地使用 1 个以上的 CPU 我读到的关于这个主题的大部分内容都是在 2002 年至 2006 年写的 我没有看
  • 数据中的是什么?

    我使用OCaml版本4 02 3 我定义了一个类型self type self Self of self type self Self of self 及其实例s let rec s Self s val s self Self
  • llvm OCaml 绑定

    我正在研究 llvm OCaml 绑定 我通过 opam 安装了 llvm 包 opam install llvm 当我在 utop 中使用 llvm 时 出现以下错误 require llvm Error The external fun
  • Ocaml,用列表中的给定元素替换所有指定元素

    我正在编写一个 ocaml 项目 其中我有一个函数可以替换所有 在字符列表中 E 这是我的建议代码 let rec string lst change E lst match lst with gt let a E a h t if h g
  • Ocaml 中的 Socket onread、onready、onclose 事件处理函数

    我正在 Ocaml 中使用 TCP IP 套接字开发协议 并且我有兴趣实现事件驱动方法 基本上 我想创建事件处理函数 每当套接字接收到新数据或关闭或打开时调用 是否可以在 Ocaml 中完成而无需使用多线程手动实现 Thanks 是的 制作
  • 将 OCaml 转换为 F#:将 OCaml open_box 和 close_box 转换为 F#

    我正在将几个基于 OCaml 的模块转换为 F 并遇到了 OCaml 打印格式化函数open box 和 close box http caml inria fr pub docs manual ocaml libref Format ht
  • 使用 OCaml 收集外部命令的输出

    在 OCaml 中调用外部命令并收集其输出的正确方法是什么 在Python中 我可以做这样的事情 os popen cmd read 如何在 OCaml 中获取外部程序的所有输出 或者 更好的是 带有 Lwt 的 OCaml Thanks
  • 值的 Ocaml 表示 - 原子

    我查看了一些 OCaml 值的内部表示 空数组的表示是atom 0 即一个块tag 0 and size 0 空浮点数数组由atom 0 too 是否存在由原子表示的任何 OCaml 值tag gt 0 如果不是 OCaml 字节码集包含以
  • 如何缩进现有 OCaml 代码

    我有大约 30 000 行缩进严重的 OCaml 代码 包括 mly 和 mll 文件 并且想要缩进它们 我尝试在谷歌上搜索 ocaml indent 的变体 我能得到的最接近的结果是使用 Omlet vim 并一次缩进一行代码 在插入模式
  • 使用只有一个元组值的变体类型构造函数

    type foo Foo of int int let t 1 2 Foo t Error The constructor Foo expects 2 argument s but is applied here to 1 argument
  • OCaml:如何运行包含库的脚本

    我正在按照 Real World OCaml 一书来学习 OCaml 许多程序都需要使用 Jane Street Core 库 当我在顶层使用这个核心库中的函数时 它工作得很好 在那里 我只需使用以下命令来打开 Core 库 use top
  • OCaml 作为 C 库,hello world 示例

    我希望通过 C 调用 OCaml 代码 方法是将 OCaml 编译为包含 C 接口的静态或共享库 这一页 https caml inria fr pub docs manual ocaml intfc html似乎解释了如何为 OCaml
  • Ocaml 模块和包的区别

    我基本上是在尝试遵循这篇文章中的 stackoverflow 答案 OCaml 中 HttpRequest 的最佳模块是什么 https stackoverflow com questions 14134116 what is the be
  • 使用fold_left/right反转OCaml中的列表

    更新 解决方案 感谢 jacobm 的帮助 我想出了一个解决方案 Folding Recursion let reverse list 3 theList List fold left fun element recursive call

随机推荐

  • 我可以在 Android 设备上存储数据以在安装之间保留吗?

    我想以在应用程序安装之间保留少量数据的方式存储少量数据 我显然无法使用 SharedPreferences 因为它们在卸载时会被删除 有没有什么方法可以存储数据 以便在重新安装应用程序后数据仍然存在 我想要存储的数据是一个唯一的 ID 以便
  • PHP 安全性:将 POST 发送到相同的 URL = 不好?

    昨天我收到了有关将 POST 数据发送到同一页面的问题的回复重定向后获取模式 http en wikipedia org wiki Post Redirect Get像这样 if isset POST Submit prevent rese
  • WPF 窗口背景 ImageBrush 不平铺

    我有一个带有背景图像的窗口 图像可能会在运行时发生变化 这对此并不重要 我希望图像固定在左上角 确实如此 而不是缩放 这也是正确的 但是当窗口大于图像时 我需要重复 平铺 图像 我正在做 我缺少什么 TIA 您需要设置TileMode ht
  • Xerces C++ - 加载、读取和保存,替代方案?

    我正在寻找一个教程来加载 XML 文件 读取它 更改它并最终使用 C 保存它 我正在使用 Linux Ubuntu 并尝试使用 Xerces 通过 Google 和很多时间 我只能加载一个 XML 文件 include
  • 查找 postgres jsonb 数组中对象的位置

    我在 jsonb 中有一个看起来像这样的对象数组value表的列 west id aa92f346 7a93 4443 949b 4eab0badd983 version 1 id cd92e346 6b04 3456 050a 5eeb0
  • 如何确保日志永久保留在Kafka中?

    我需要配置Kafkanever删除日志 查看他们的文档 我看到两种控制此操作的参数 日志清理器 描述于http kafka apache org documentation html compaction http kafka apache
  • 通过 Webpack 5 模块联合提供样式和资源

    我已经在我的 Angular 11 应用程序中成功实现了相对较新的 webpack 5 模块联合系统 因此它可以从另一个版本按需远程加载模块 我一无所获的一件事是如何处理样式表和图像等资源 例如 联合模块中有一个菜单元素需要自己的样式 将它
  • 反序列化为 JObject 时获取类型名称

    使用 Deserialize 时有没有办法获取 type 属性 我在打开 TypeNameHandling 的情况下进行序列化 但是当我反序列化时 我没有包含类型信息的程序集 我需要使用类型名称将其存储在正确的集合中 看起来 type 没有
  • IIS 8.5 服务 dll 用于下载而不是执行

    问题 当我访问 32位 DLL通过 URL 类似http localhost somepath some dll action http localhost somepath some dll actionIIS总是认为我想下载文件 文件大
  • 枚举声明中不必要的逗号[重复]

    这个问题在这里已经有答案了 可能的重复 NET 枚举允许在最后一个字段中使用逗号 https stackoverflow com questions 2147333 net enumeration allows comma in the l
  • 更改表所有者

    我正在尝试更改表的所有者 sp changeobjectowner OWNER TABLENAME dbo 但是执行时我收到错误消息 消息 15001 级别 16 状态 1 过程 sp changeobjectowner 第 62 行对象
  • 调试 KML 文件

  • 浮点和定点表示的优缺点[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在过去的三天里 我一直在尝试理解浮点表示和定点表示之间的确切区别 我在阅读这些材料时感到困惑 无法确定什么是对的 什么是错的 问题之一
  • 将查询结果传递到存储过程

    我有一个接受三个参数的存储过程 是否可以使用查询作为输入来调用此存储过程 举个例子 我有tableA SELECT FROM TABLEA A B C 1 2 3 4 5 6 现在 有什么方法可以调用 EXEC sp name SELECT
  • 2D瓦片地图生成

    对于 2D 图块引擎 我正在研究地图生成算法 我尝试了高度图生成 山地一代 柏林噪声 菱形方形 适合具有高度组件的图块地图 但我有草 海 沙漠等精灵 它们的放置方式应如下所示 一切都从海洋开始 岛屿被放置在地图的中间 这是我尝试的算法大多失
  • 如何从随机网页中抓取文本和图像?

    我需要一种方法来直观地表示互联网上的随机网页 比如说this https www reddit com r food comments 85rm0d homemade chocolate banana bread with nuts 网页
  • 如何存储历史数据[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我和一些同事就存储历史数据的最佳方式进行了争论 目前 对于某些系统 我使用单独的表来存储历史数据 并为当前活动记录保留原始表 所以 假设我有
  • 如何在android中的后者边界内打开另一个应用程序内的应用程序?

    如何在android中的后者边界内打开另一个应用程序内的应用程序 即 类似于 HTML 中的 iframe 的作用 你基本上不能 这违反了Android的规则 您最多能做的就是打开一个网页作为应用程序的一部分 这是使用 webView 完成
  • LevelDB 与 std::map

    在我们的应用程序中我们使用std map存储 键 值 数据并使用序列化将该数据存储在磁盘上 通过这种方法 我们发现磁盘 I O 是性能瓶颈 并且使用 key 查找值并不是很快 我遇到过 LevelDB 并考虑使用它 但我有一些问题 Leve
  • 为什么 `;;` 在 utop 中给我一个语法错误?

    我正在开发一个简短的项目 将小程序从 python 转换为 java 反之亦然 我创建了以下代码 并在 utop 中进行了测试 let c let x for int i 0 i lt 10 i and y for i in range 0