OCaml 中 let rec 的限制

2024-04-13

这几天我在学习OCaml,发现了这个:

OCaml 对于可以放在 let 记录右侧的内容有限制。像这个

let memo_rec f_norec =
let rec f = memoize (fun x -> f_norec f x) in
f;; 
Error: This kind of expression is not allowed as right-hand side of `let rec'

其中,memoize 是一个函数,它接受一个函数并用 Hashtable 将其转换为记忆版本。显然 OCaml 对“let rec”右侧构造的使用有一些限制,但我不太明白,有人能解释一下吗?


允许受约束的表达式类型let rec描述于第 8.1 节 https://ocaml.org/manual/letrecvalues.html手册的内容。具体来说,函数应用涉及let rec不允许定义名称。

粗略摘要(取自该链接):

非正式地,可接受的定义类由那些定义的名称仅出现在函数体内或作为数据构造函数的参数的定义组成。

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

OCaml 中 let rec 的限制 的相关文章

  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 函数式语言中的部分求值和函数内联有什么区别?

    我知道 函数内联就是用函数定义代替函数调用 部分评估是在编译时评估程序的已知 静态 部分 在 C 等命令式语言中 两者之间存在区别 其中运算符与函数不同 但是 在像 Haskell 这样的函数式语言 其中运算符也是函数 中 两者之间有什么区
  • 我为什么要学习 Lisp? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • F# 静态成员类型约束

    我正在尝试定义一个函数 factorize 它使用类似于 Seq sum 的结构类型约束 需要静态成员 Zero One 和 以便它可以与 int long bigint 等一起使用 似乎无法获得正确的语法 并且无法找到有关该主题的大量资源
  • 某些数据结构是否比其他数据结构更适合函数式编程?

    In 现实世界哈斯克尔 http book realworldhaskell org 有一个标题为 没有数组或哈希表的生活 的部分 其中作者建议在函数式编程中首选列表和树 而在命令式程序中可能会使用数组或哈希表 这是有道理的 因为在创建新列
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 相当于 Java 中 C++ 的 std::bind 吗?

    有没有一种方法可以像 C 中的 std bind 一样将 Java 中的参数绑定到函数指针 Java 中类似的东西会是什么 void PrintStringInt const char s int n std cout lt lt s lt
  • 基于函数签名的模式匹配

    在 F 中 您可以对函数签名进行模式匹配 我想用一个函数来装饰多个函数 该函数测量函数的执行情况并调用 statsd 我当前的功能是 let WrapFunctionWithPrefix metrics Metric Client IRec
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • OCaml 前向声明

    有没有办法在 OCaml 中进行 C 风格的前向声明 我的问题是我有两个相互引用的变体 type path formula Next of state formula Until of state formula state formula
  • 哪种编程语言或库可以处理无限级数?

    哪种编程语言或库能够处理无限级数 例如几何级数或调和级数 它可能必须有一些众所周知的系列的数据库 并在收敛的情况下自动给出适当的值 并且可能在发散的情况下生成异常 例如 在 Python 中 它可能如下所示 sum 0 sign 1 0 f
  • Java泛型 - 实现像map这样的高阶函数

    我决定用 Java 编写一些常见的高阶函数 map filter reduce 等 这些函数通过泛型实现类型安全 但我在一个特定函数中遇到通配符匹配问题 为了完整起见 函子接口是这样的 The interface containing th
  • 在 Python 中,部分函数应用(柯里化)与显式函数定义

    在 Python 中 以下方式是否被认为是更好的风格 根据更一般的 可能是内部使用的功能显式定义有用的功能 或者 使用偏函数应用来显式描述函数柯里化 我将通过一个人为的例子来解释我的问题 假设编写一个函数 sort by scoring 它
  • 在同一迭代中过滤和映射

    我有一个简单的情况 我想过滤并映射到相同的值 如下所示 const files results filter function r return r file map function r return r file 为了节省代码行并提高性
  • Haskell 有 takeUntil 函数吗?

    目前我正在使用 takeWhile x gt x 1 x 89 l 从列表中获取最多为 1 或 89 的元素 但是 结果不包括这些标记值 Haskell 是否有一个标准函数可以提供这种变化takeWhile结果中包含哨兵 到目前为止 我对胡
  • C++0x (C++11) 作为函数式语言?

    我想知道 C 0x C 11 带有 lambda 和完美转发 是否是一种函数式语言 的超集 函数式语言有什么特性是 C 所没有的吗 函数式编程范式将计算建模为集合之间的关系 因此本质上是声明性的 然而 在实践中 我们通常认为函数是命令式的
  • 如何将函数转换为点自由形式?

    假设我有一个 JavaScript 函数 function f x return a b x c x 我如何将其转换为无点函数 通过组合函数 还有关于这方面的更多信息的资源吗 一般来说 当您将函数转变为无点风格时 没有简单的规则可遵循 要么
  • 如何向 Scotty 中间件添加基本身份验证?

    我目前正在制作 Scotty API 但找不到任何 basicAuth 实现的示例 Wai Middleware HttpAuth 具体来说 我想将基本身份验证标头 用户 通行证 添加到我的某些端点 即以 admin 开头的端点 我已经设置
  • 将名称绑定到值与将值分配给变量

    阅读 Bartosz Milewski 的文章完整的 https www fpcomplete com school starting with haskell basics of haskell 3 pure functions lazi

随机推荐

  • jquery遍历新创建的元素

    我正在尝试在表中添加新行 并将它们保存到数据库中 首先 我使用 append 在表中追加行 tablename append tr td newly added row td tr 附加功能运行良好 我的页面显示了正确的结果 但是 我无法选
  • 如何以编程方式实例化新的视图控制器

    我有一个带有两个 UIButtons 和 UIlabels 的 ViewController 为了制作类似的 ViewController 我想以编程方式实例化一个新的视图控制器 像这样 let vc storyboard instanti
  • Android - 如何确定坐标是否位于 Google 地图中的道路上

    我需要在我的应用程序中进行检查 以确定给定的坐标是否位于 Google 地图中的道路上 Google Maps API 中是否有任何功能可以帮助我实现这一点 提前致谢 据我所知 使用 Google Maps API 无法完成此操作 我认为你
  • 将 html 输入对齐在同一行

    有人可以给出一个简单的解决方案 如何将表单输入对齐在同一行上 例如 很多时候 当我构建表单时 我可以让它们彼此对齐 并且看起来不错 但是如果我将两个输入 如文本区域 文本 放在另一个文本或按钮旁边 我会得到垂直对齐差异 有没有办法解决这个问
  • 突出显示两个字符串之间的差异

    如果我有两个较长的字符串 VARCHAR2 是否有一种简单的方法或算法可以复制或移植到 PL SQL 来比较它们 插入标记 即 以便在网页中呈现时 差异将突出显示 例如 BEGIN DBMS OUTPUT put line markup d
  • 如何动态切换 jquery 中的元素?

    所以我想做的是制作一个动态的小脚本来选择县和城市 好吧 我在 mysql 数据库中拥有所有国家和城市 如果我选择一个县
  • 如何在 GitLab CI 中显示来自另一个存储库的测试

    因此 我的项目包含单元测试 当我在 GitLab 中配置 CI 系统后发出合并请求时 它们会很好地显示为绿色或红色圆圈 但现在我也有一些集成测试 它们驻留在单独的存储库中 你为什么问 因为我有多个微服务需要一起测试 并且每个微服务都有自己的
  • vim 定界伴侣

    使用 DelimitMate 它会自动生成右括号 当我在括号内输入完毕后 按什么键可以快速转到右括号的右侧 现在我必须手动按 ESC 然后按 a 这些自动关闭插件 就像 Eclipse 等 IDE 中的原始功能实现一样 的想法是 您只需ty
  • C#:最易读的字符串连接。最佳实践[重复]

    这个问题在这里已经有答案了 可能的重复 我应该如何连接字符串 https stackoverflow com questions 3102806 how should i concatenate strings 在日常任务中 当执行任务时
  • 最小化时窗口内容消失

    我有一个简单的类 当鼠标拖动时画一条线 或者当鼠标按下 释放 时画一个点 当我最小化应用程序然后恢复它时 窗口的内容消失 除了最后一个点 像素 我明白这个方法super paint g 每次窗口更改时都会重新绘制背景 但无论我是否使用它 结
  • WebApi HTTPPOST 端点未命中

    我有以下简单的 HTTPPOST 端点 AllowAnonymous HttpPost Route forgotPassword public IHttpActionResult ForgotPassword string userName
  • 如何暂停 main()

    我正在尝试编写我的程序 以便当用户单击 Drive To JButton 在我的主类 Dispatch 中 时 它会从另一个类 Cab 打开一个 JFrame GoToDistination 用户可以在其中输入所需的内容信息 单击 继续 后
  • 如何仅在 Scrollview/Recyclerview 的底部添加淡入淡出边缘?

    I am using requiresFadingEdge true for adding fading effect at the bottom but the problem is it also shows fading effect
  • 如何将字符串{}值替换为obj(键值)

    我最近开始在 NodeJs 上编程 我有不同的字符串和 Json 对象 eg var str My name is name and my age is age var obj name xyz age 24 var str I live
  • 如何在 XML 模式中使任一字段为必填字段

    我有一个如下所示的架构 我有一些关于该架构的问题 1 制作方法CourierNumber or WorkLocationCoordinate强制性的 我使用了如下所示的一种全局类型 EDIT正如 Abel 在修改后的模式中提到的那样 仍然没
  • '无法在descriptionForLayoutAttribute_layoutItem_coefficient中创建描述。有些东西是零

    首先 我用 3 个不同的 UIView 来替换 iPad Storyboard 上 Split View Controller 中的详细视图 它在 iOS 8 iPad 上运行良好 但是 当我加载详细视图之一时 应用程序在 iOS 7 和
  • 递归可以命名为简单的函数调用吗?

    请考虑递归函数 1 int calc int num 2 sum sum num sum is a global variable 3 num 4 if num 0 5 return sum 6 calc num 它计算一个整数的总和 我的
  • 如何使用 Objective c 在 iOS 9.3 中添加动画到启动屏幕

    如何在 iOS 9 3 中制作如下图所示的动画启动屏幕 基本上 您无法制作动画启动画面 但是 您可以在故事板中复制启动屏幕 并将其作为应用程序的入口视图控制器 VC 然后 当视图加载时 您可以开始动画 最终结果是 您将得到一个 动画启动画面
  • 我的 jframe 不显示 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是java编程的初学者 我试图让我
  • OCaml 中 let rec 的限制

    这几天我在学习OCaml 发现了这个 OCaml 对于可以放在 let 记录右侧的内容有限制 像这个 let memo rec f norec let rec f memoize fun x gt f norec f x in f Erro