关于OCaml中的模式匹配算法

2023-12-27

我正在为我用 OCaml 设计的函数式语言编写编译器。我希望我的小语言具有模式匹配的功能,但是,我陷入了想出一种算法来实现它的困境。当我深入研究这个问题时,它看起来真的很复杂。我用google找不到太多关于相应算法的有用信息。如果有人能给我一些提示或向我指出资源,我将不胜感激。或者有什么技巧可以利用 OCaml 在模式匹配方面的强大功能来解决这个问题,这样我就不需要实现它了?谢谢!


OCaml 背后的一些人写了一些关于编译模式匹配的好论文。特别是参见将模式匹配编译为良好的决策树 http://www.cs.tufts.edu/~nr/cs257/archive/luc-maranget/jun08.pdf and 优化模式匹配 http://pauillac.inria.fr/~maranget/papers/opat/pat.ps.gz。回顾一下可能也会有用这个 stackoverflow 帖子 https://stackoverflow.com/questions/7883023/algorithm-for-type-checking-ml-like-pattern-matching.

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

关于OCaml中的模式匹配算法 的相关文章

  • 如何缩进现有 OCaml 代码

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

    我正在查看数组扩展函数并发现reduce one inline fun
  • 如何使用 opam 安装特定版本的 ocaml 编译器

    如何使用 opam 或其他包管理器 安装特定版本的 ocaml 编译器 和兼容包 我快速浏览了 opam 文档 但没有找到相关信息 我需要 ocaml 编译器 最好是本机代码编译器 来构建 unison 一个文件同步软件 我需要使用相同版本
  • 寻找一种重构 D3.js 风格的方法链接模式的方法

    在学习 D3 js 时 我遇到了博客文章 http bost ocks org mike chart 解释其可重用代码单元背后的主要设计模式 我复制了下面的相关代码 下面呈现的模式的方式正是在 D3 代码库和插件中使用的方式 example
  • 我在 Python 中查找重复循环的正则表达式模式有什么问题?

    我想匹配任何具有重复循环的字符串 就像这个数据一样 3333333333333333333333333333333333333333 1 digit cycle 3 1666666666666666666666666666666666666
  • 计算 python 字典/数组数据结构的非空尾叶 - 递归算法?

    我正在寻找一个函数来查找一种复杂字典 数组结构的所有非空端点 我认为因为我不知道嵌套数组的数量或它们的位置 所以它必须是递归的 而我只是还没有完全理解这种思维方式 所以对于嵌套字典 x top middle nested value nes
  • 我应该选择哪种函数式编程语言作为第一种函数式编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想学习一种函数式编程语言 以了解不同的编程范例 我的编程背景 Java 我刚刚通过了 SCJP 考试 一些 ruby 和非常有限的 Rails
  • 在 OCaml 自定义顶层设置提示

    在 OCaml 自定义顶层中 有没有一种方法可以通过编程方式设置提示 到别的东西 我希望能够更改它以响应用户的最后一个自定义功能 有点像bash你如何设置PS1 我什至找不到 directive 来更改它 谢谢 在 toplevel top
  • 使用 ocaml List.fold_left 列表中的最后一个元素

    我可以通过以下代码找到列表的最后一个元素 let last xs a list a let rec aux xs prev match xs with gt prev x ys gt aux ys x in match xs with gt
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • “foop”:命名约定?它是“foo”的辅助递归函数;后缀“p”是什么意思?

    我遇到了以下代码片段 函数定义 choose x xs choosep x xs where choosep x x choosep x x choosep x xs choosep x xs in 柯里编程语言 http en wikip
  • f# 运行总计序列

    好吧 这看起来应该很容易 但我就是不明白 如果我有一个数字序列 如何生成由运行总计组成的新序列 例如 对于序列 1 2 3 4 我想将其映射到 1 3 6 10 以适当的功能方式 Use List scan https msdn micro
  • OCaml 2 和 3 之间的差异

    我有兴趣学习这门语言 但似乎有关该主题的教程和书籍很少 我只找到一本关于这个主题的合适的书 用 Objective Caml 这绝对是完美的 但问题是它是基于 2 04 版本的 所以我唯一关心的是使用这本书 对于 OCaml 3 x 是否会
  • OCaml 中的用户定义打印机

    printf fprintf等 全部接受 a转换 手册上说对于 a 用户定义的打印机 采用两个参数 并将第一个参数应用于 outchan 当前输出通道 和第二个参数 因此 第一个参数的类型必须为 out channel gt b gt un
  • 减少/折叠幺半群列表,但减少器返回任一

    我发现自己遇到过几次这样的情况 我有一个减速器 组合 fn 如下所示 def combiner a String b String Either String String a b asRight String 它是一个虚拟实现 但 fn
  • 理解 Scala FP 库

    只是为了让那些想要开始使用 Scala FP 库 在纯 FP 方面变得更好的人快速清晰地了解 有人能澄清猫和猫效应 猫效应 IO 之间的区别 关系吗 最重要的是 齐奥和莫尼克斯对此有何看法 最后 与 ScalaZ 7 8 有何关系 到目前为
  • 是否可以只迭代一个流一次并执行 2 个或更多操作?

    给定代码 List
  • 如何判断何时创建新组件?

    我一直在寻找背后的逻辑当有人在 AngularJS Angular 上的 Web 应用程序中创建新组件时但我认为这更通用 可能适用于所有基于组件的前端框架 我知道有像这样的一些原则应该是抽象的和可重用的但例如我在角度文档中看到 每个单独的路
  • 创建新的保护子句

    在 Elixir 中 我将如何为函数创建新的保护子句 显然 我已经看到你不能只调用 a 中的任何函数when声明 但如果能够做这样的事情那就太好了 defmodule Player do def play card player do de
  • 你能在 scala 中使用 varargs 柯里化一个函数吗?

    我正在考虑如何用可变参数柯里化一种方法 然后我意识到我什至不知道如何去做 理想情况下 它应该让您可以随时开始使用它 然后以可迭代结束 def concat strs String strs mkString val curriedConca

随机推荐

  • 在需要之前,必须从模块“libxml2.parser”导入“xmlKeepBlanksDefault”声明

    当我尝试使用 Xcode 9 3 beta 编译并运行现有应用程序时 它给出了如下错误 Declaration of xmlKeepBlanksDefault must be imported from module libxml2 par
  • 如何将 csv 文件从 Internet 加载到 Access 数据库中?

    我有以下包含股票代码的数组 Public Shared tickerArray As String GOOG AAPL V MSFT 我需要使用这个循环 For Each tickerValue In Form1 tickerArray将每
  • 将 Nestjs 与 Sentry 集成

    我想将 Sentry 与 Nest js Express 集成 但我刚刚找到了 raven 版本 但它已被弃用 我按照哨兵文档与 Express 集成 但不知道如何处理 所有控制器都应该住在这里 部分 const express requi
  • 重新图表 跳过一个栏

    我有一些数据看起来像这样 答 15 乙 30 丙 25 日 12 答 15 丙 25 日 12 我想渲染一个条形图 如果 b 未定义 则跳过 a 和 c 之间的空格 但如果定义了 b 仍会渲染 b 基本上就像此图像中的两个条形图组一样 其中
  • 匹配具有多个可能值的元组

    由于元组与范围匹配有效 我希望类似的东西也适用于替代方案 match x 1 1 gt println A 1 2 3 gt println B ranges work 2 5 4 6 gt println C this doesn t g
  • VS2010 分析仪/泄漏检测

    有人知道可以与 VS2010 代码一起使用的分析器和泄漏检测器吗 最好是Win7下运行的 我在这里和谷歌搜索过 我发现了一种有效的检漏仪 内存验证器 但我并没有太印象深刻 一方面 它显示了一堆菜单泄漏和我相当有信心的东西不是真实的 我也尝试
  • 无参数(和)返回 t

    CL和Scheme都定义了 and 回来t or t 没有参数 我试图理解这样做的理由 我天真的假设是空集是假的 传递零个参数感觉就像传递任何可能为真的东西 编辑 clojure 遵循相同的约定 我肯定错过了一些基本的 Lisp 假设 空积
  • 在Java中如何使用Byte Buddy分配给字段?

    我很难理解以下文档字节好友 http bytebuddy net tutorial 为了帮助我学习 API 我想生成与此 Java 等效的字节代码 public final class GeneratedByByteBuddy privat
  • 不区分大小写的正则表达式无需重新编译?

    在Python中 我可以使用以下命令将正则表达式编译为不区分大小写re compile gt gt gt s TeSt gt gt gt casesensitive re compile test gt gt gt ignorecase r
  • 具有修改的可绑定属性默认值的 Xamarin Forms 子类

    我正在尝试获取 Xamarin Forms Label 类的子类 在我的子类中 除了许多其他更改之外 我希望有一个不同的某些可绑定属性 例如 FontSize 和 FontAttributes 的默认值 但是 如果我在构造函数中设置这些 样
  • 创建 Shapely 多边形的数据框会给出“ValueError:LinearRing 必须至少有 3 个坐标元组”

    我想创建一个中国各省人口的热图 我发现本指南 http sensitivecities com so youd like to make a map using python EN html Ut3k7bS thF这里有类似的问题 尽管我必
  • 解析 XML 提要时,将 HTML 实体(例如 ')替换为等效字符

    解析 XML 提要时 我从内容标记获取文本 如下所示 政府已为圣尤南学院的一项重大整修项目提供资金 这是继上个月宣布拨款将其预制房屋更换为永久住宿之后的补充 最新的拨款将用于对学校的一个部分进行重大整修 以便为班级提供新的住宿 该项目还将包
  • Swift:如何在设备旋转后刷新 UICollectionView 布局

    我使用 UICollectionView flowlayout 来构建一个简单的布局 每个单元格的宽度设置为屏幕的宽度 使用self view frame width 但是当我旋转设备时 单元格不会更新 我找到了一个函数 在方向改变时调用该
  • 填充 RecyclerView 后底部工作表对话框会跳转

    我遇到了一个特殊的问题 该应用程序的流程如下 触发底部工作表对话框 对话框片段进行 api 调用 服务器 等待响应时会显示一个旋转图标 收到响应后 将填充 Recycler 视图以及一些 TextView 一旦 Recycler View
  • Laravel 419 页面在生产服务器上已过期。 [ 框架:Laravel |版本:7.5.2]

    Hello 问题 如果我推送注册用户的表单 我会收到 419 页面已过期 我在这里搜索我的问题 1 Stackoverflow 由于不活动而过期 我的问题没有成功 https stackoverflow com questions 4614
  • 安装pyaudio时,pip在/opt/homebrew/Cellar/portaudio/19.7.0中找不到portaudio.h

    在开始提问之前 我尝试通过这篇文章解决问题 但没有成功 Link https stackoverflow com questions 33513522 when installing pyaudio pip cannot find port
  • php中用于加密密码的函数?

    我正在编写一个允许用户注册的 PHP 网站 我正在使用 codeigniter php 我想知道加密密码的最佳功能 这个功能有什么区别 密码几乎不应该被加密 相反 它们应该是单向散列的 一般来说 推荐使用bcrypt http codaha
  • 如何使用包含日期的字典对数组进行排序?

    In my Swift项目有一个Array with Dictionaries Each Dictionary包含一个String of date 我怎样才能得到一个新的Arraywith date从最新到最旧 谢谢 var array d
  • iOS 14 上的 UDP 监听器

    我有一个关于如何在 iOS 14 上设置 UDP 侦听器的问题 我有一个 UDP 侦听器 该侦听器过去一直有效 但更新到 iOS 14 后 它偶尔有效 根本无效 它位于 NSObject 中 并在端口 15000 无特定 IP 地址 上侦听
  • 关于OCaml中的模式匹配算法

    我正在为我用 OCaml 设计的函数式语言编写编译器 我希望我的小语言具有模式匹配的功能 但是 我陷入了想出一种算法来实现它的困境 当我深入研究这个问题时 它看起来真的很复杂 我用google找不到太多关于相应算法的有用信息 如果有人能给我